zoukankan      html  css  js  c++  java
  • C++编译变更stlport到使用g++的stl经验总结

    . 花了几天时间,需要把经验给记下来。

    1. 需要支持C++11的编译器,最方便的方式就是

    yum -y install devtoolset-6

    在/usr/local/bin中增加gcc6.sh

    #!/bin/bash

    scl enable devtoolset-6 bash

    如果把这个放到~/.bashrc中,可能登录时会造成系统资源不足,我试试放在~/.bash_profile中。

    CMakeLists.txt中增加:

    macro(use_cxx11)
    if (CMAKE_VERSION VERSION_LESS "3.1")
    if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
    set (CMAKE_CXX_FLAGS "-std=gnu++11 ${CMAKE_CXX_FLAGS}")
    endif ()
    else ()
    set (CMAKE_CXX_STANDARD 11)
    endif ()
    endmacro(use_cxx11)

    use_cxx11()


    原来stlport里用的是hash_map,需要更改为g++ stl中的unordered_map,全局替换就行了。

    2. 依赖的第三方库原来使用stlport编译出来的。比如,把libcppunit.a拷贝到tmp/t下,

    ar x libcppunit.a

    会发现有一个libstlport.a这个库。放弃这个libcppunit.a,
    yum -y install cppunit

    如果下载源码:是https://sourceforge.net/projects/cppunit/files/cppunit/1.12.1 中的地址。

    CMakeLists.txt中,libcppunit.a 改为libcppunit.so, 并且把原来的.a从原来位置挪开。

    还发现
    #define RESULT2ERR {ostringstream os;os << result;lastError = os.str();}
    这个报编译错误,是result是XmlRpcValue类型,是libXmlRpc中的。

    下载源码:https://gigenet.dl.sourceforge.net/project/xmlrpcpp/xmlrpc%2B%2B/Version%200.7/xmlrpc%2B%2B0.7.zip,然后编译,解决编译错误,主要是有些文件没有包含 string.h。生成的是.a,决定用.so,修改makefile。

    CPPFLAGS增加:-fPIC
    CPPFLAGS = -I$(SRC) -fPIC

    增加目标:

    $(SO): $(OBJ)
    $(CXX) -shared -o $@ $(OBJ)

    测试文件Validator.cpp对编译错误做修改:

    // s += params[0][params[0].size()-1]; //tj com, cannot compile
    s += std::string(params[0][params[0].size()-1]);

    把编译出来的.so拷贝到/usr/local/lib下,把src/*.h拷贝到/usr/local/include/xmlprc。在CMakeLists.txt中做相应的修改,老的.a挪走。

    3. 对libXmlRpc.a做测试时,需要

    MY_LIBS   :=  $(MY_LIBS)  -Wl,-Bstatic -L/usr/local/lib -lXmlRpc -Wl,-Bdynamic  -lm 

    注意-lm这样写,否则会报错。

    CMakeLists需要增加:

    LINK_DIRECTORIES(/usr/local/lib)

    整个问题,从google上搜索找不到有效的答案。主要是需要顿悟: cppunit是用了stlport才编译出来的,而我们不想使用stlport。突然领悟了这个,问题才最终得到解决。

    4. 中间担心cmake有问题,下载cmake3.10.x版本,并且安装。安装时指定 
    ./configure --bindir=/usr/local/cmake ,争取不要把缺省的cmake2.8给覆盖了。


  • 相关阅读:
    算法题解:旋转数组的最小数字
    算法题解:连续子数组的最大和及其下标
    算法题解:快速排序算法(维基百科版)
    c++入门之类——进一步剖析
    c++入门之运算符重载
    c++入门之浅入浅出类——分享给很多想形象理解的人
    c++入门之再话内存和引用
    c++入门之引用
    c++入门之内置数组和array比较
    c++入门之结构体初步
  • 原文地址:https://www.cnblogs.com/tangxiaosheng/p/7718286.html
Copyright © 2011-2022 走看看