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++编译变更stlport到使用g++的stl经验总结的更多相关文章
- ubuntu14 编译安装(升级)g++
编译安装(升级)g++ ubuntu14自带的g++为4.8.4,不支持c++11.现要将g++升至5.2.0 1.下载安装: 参考https://www.cppfans.org/1719.html ...
- VS2013 编译&使用 stlport
1. 下载stlport. 下载地址:http://sourceforge.net/projects/stlport/ 2. 解压到一个目录下面, 我的是解压到D:\project_kuku\pr ...
- Makefile 编译时虽然加上了-g 选项 但是还是无法调试
make 编译时默认的命令是all,不能写成其他的
- [转]Linux下g++编译与使用静态库(.a)和动态库(.os) (+修正与解释)
在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库 ...
- g++编译流程
测试程序test.cpp如下所示: #include <iostream> using namespace std; #define MAX 9 int main() { //just f ...
- linux下使用g++编译cpp工程
C++编程中相关文件后缀 1.单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: /* helloworld.cpp */ #includ ...
- g++编译总结
g++编译&&gdb调试&&coredump调试 一.编译注意细节 1.使用g++编译CPP文件如果用gcc编译C++源文件时,加以下选项:-lstdc++,否则使用了 ...
- Linux-编译器gcc/g++编译步骤
gcc和g++现在是gnu中最主要和最流行的c&c++编译器.g++是c++的命令,以.cpp为主:对于c语言后缀名一般为.c,这时候命令换做gcc即可.编译器是根据gcc还是g++来确定是按 ...
- gcc与g++的编译链接的示例详解
一.编译方式的示例详解 1. 编译C代码 代码如下:main.c /*! ************************************************************** ...
随机推荐
- EXSI中Linux安装tools
挂载 mount /dev/cdrom /mnt/ 进入挂载目录复制安装包 cp VMwareTools-10.2.1-8267844.tar.gz /tmp/ 解压安装 cd /tmp/ tar - ...
- Cross-origin plugin content from must have a visible size larger than 400 x 300 pixels, or it will be blocked. Invisible content is always blocked.
Cross-origin plugin content from must have a visible size larger than 400 x 300 pixels, or it will ...
- PL-SLAM
双目 1.PL-SLAM: a Stereo SLAM System through the Combination of Points and Line Segments ubuntu14.04配置 ...
- tar命令参数详解
命令总览:tar [-]A --catenate --concatenate | c --create | d --diff --compare | r --append | t --list | u ...
- arcengine实现右键菜单打开/关闭所有图层
参考资料: http://developer.51cto.com/art/201104/256774.htm 参照后自己做的: 关于右键菜单的几个有价值的网址: http://blog.csdn.n ...
- 转:eval(data)和eval("("+data+")")
http://www.w3school.com.cn/jsref/jsref_eval.asp JavaScript eval() 函数:eval() 函数可计算某个字符串,并执行其中的的 JavaS ...
- 被监测teamviewer被检测出用于商业用途
一.下载teamviewer的破解程序 下载链接 这个要付几块钱,本人付过,个人下载过,可以免费传给你们,可以留下邮箱,但是不一定及时回复. 二. 解压后将.exe放到对应的软件安装目录,运行,点击f ...
- linux链接库的理解
前段时间遇到个奇怪的问题,经调试是由于可执行程序A编译时使用的libssl.so.1.1及对应版本头文件,A链接的库libtest.so编译时使用的libssl.so.1.0及对应版本头文件,执行时l ...
- /var/run/utmp文件操作函数
相关函数:getutent, getutid, getutline, setutent, endutent, pututline, utmpname utmp 结构定义如下:struct utmp{ ...
- pyqt5_eric6_Qt desinger
麦子学院视频教程day1 1.创建pushbutton 绑定信号和槽 Ui_mainWindow.py 1 from PyQt5 import QtCore, QtGui, QtWidgets cla ...