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 /*! ************************************************************** ...
随机推荐
- Hadoop开发环境配置2-eclipse集成maven插件
1.下载eclipse:eclipse-SDK-4.5-win32-x86_64.zip 下载地址: http://archive.eclipse.org/eclipse/downloads/drop ...
- Laravel 5.2 INSTALL- node's npm and ruby's bundler.
https://getcomposer.org/doc/00-intro.md Introduction# Composer is a tool for dependency management i ...
- NULL - AUTO_INCREMENT
http://dev.mysql.com/doc/refman/5.7/en/create-table.html Data Types and Attributes for Columns data_ ...
- iOS之WKWebView加载的网页自适应大小
一,前言 有时候在WKWebView加载页面后会发现页面的字会很小, 这是因为原网页没有做手机屏幕尺寸的适配, 那么在后台不做调整的情况下我们移动端怎样来适配页面呢? 以下代码可以适配大小(原本不可以 ...
- React Native开源项目如何运行(转载)
学习任何技术,最快捷的方法就是学习完基础语法,然后模仿开源项目进行学习,React Native也不例外.React Native推出了1年多了, 开源项目太多了,我们以其中一个举例子.给大家演示下如 ...
- [development][dpdk][hugepage] 为不同的结点分配不同大小的大页内存
这个事来自dpdk, 所以, 先参考. http://dpdk.org/doc/guides/linux_gsg/sys_reqs.html 当前, 假设你已经读过上边内容, 知道大页内存时候, dp ...
- 树和二叉树->遍历
文字描述 二叉树的先根遍历 若二叉树为空,则空操纵,否则 (1) 访问根结点 (2) 先根遍历左子树 (3) 先根遍历右子树 二叉树的中根遍历 若二叉树为空,则空操纵,否则 (1) 中根遍历左子树 ( ...
- linux下nodejs的安装
一.下载 https://nodejs.org/en/download/ 然后,解压 二.配置环境变量 配置环境变量:在/etc/profile文件新增:export NODE_HOME=/usr/l ...
- tensorflow入门笔记(三) tf.GraphKeys
tf.GraphKeys类存放了图集用到的标准名称. 该标准库使用各种已知的名称收集和检索图中相关的值.例如,tf.Optimizer子类在没有明确指定待优化变量的情况下默认优化被收集到tf.Grap ...
- JS实现倒计时(天数,时,分,秒)
<!DOCTYPE html> <html> <head> <meta charset="utf-8" > <titl ...