windows平台上用arm-none-linux-gnueabi-g++4.6.3交叉编译websocket++
2016-03-31 08:34
537 查看
工作中遇到在arm板上linux系统里运行嵌入websocket++的程序,即程序里需要引入websocket++开源头文件,编译器是windows平台上的
arm-none-linux-gnueabi-g++4.6.3.exe。
1.编译boost库:
由于websocket++本身是依赖于boost库的,所以需要先在windows上安装boost库头文件,而且还主要依赖其中的libboost_system库(boost中有部分模块是需要编译生成库之后才能用来给其它程序链接的,而libboost_system就是需要编译的库之一),所以首先要先编译boost,只需要编译出libboost_system库就行,暂不必全部编译,太浪费时间。但由于目标平台是linux,所以libboost_system库自然是需要linux平台上的so库,不会是windows平台上的lib和dll。
开始本想按http://blog.csdn.net/jwybobo2007/article/details/7242307博主方法直接在windows平台上用arm-none-linux-gnueabi-g++编译boost,按要求修改了project-config.jam文件中“using
gcc : arm : arm-none-linux-gnueabi-gcc ; ”,但编译时却总报“unrecognized command line option '-mthreads'”,无奈,知识有限,不知怎么解决,所以放弃了,转向linux平台。
于是得使用虚拟机上的linux系统ubantu来编译,开始是用的普通的g++4.8编译来编译boost的system库,编译完libboost_system.so.1.55.0后拿到windows平台上链接,报不兼容的库文件,才想起这个库是intel32程序库,不是目标arm库,于是又去linux系统安装交叉编译器arm-none-linux-gnueabi-g++4.6.3.bin,用它来再次编译出arm上的libboost_system.so.1.55.0库,这次回到windows平台上使用才链接成功。步骤如下:
命令行中运行:./bootstrap.sh #此步生成b2、bjam、project-config.jam文件
修改project-config.jam中:using gcc : arm : arm-none-linux-gnueabi-g++ ; #此步arm-none-linux-gnueabi-g++最好用全路径
命令行中运行:./bjam --with-system link=shared variant=released threads=multi #b2和bjam貌似是一样的。
2.arm-none-linux-gnueabi-g++4.6.3编译websocket++程序:
websocket++库本身都是模板,不需要编译,可在自己的项目中直接引用就行。因websocket++依赖boost,而boost里有很多地方用到c++11的新特性关键字noexcept,可能是arm-none-linux-gnueabi-g++4.6.3不支持吧,总报错,于是在引用websocket++头文件之前要先定义宏:#define BOOST_NO_CXX11_NOEXCEPT,以去掉noexcept关键字。然后编译成功.
arm-none-linux-gnueabi-g++4.6.3.exe。
1.编译boost库:
由于websocket++本身是依赖于boost库的,所以需要先在windows上安装boost库头文件,而且还主要依赖其中的libboost_system库(boost中有部分模块是需要编译生成库之后才能用来给其它程序链接的,而libboost_system就是需要编译的库之一),所以首先要先编译boost,只需要编译出libboost_system库就行,暂不必全部编译,太浪费时间。但由于目标平台是linux,所以libboost_system库自然是需要linux平台上的so库,不会是windows平台上的lib和dll。
开始本想按http://blog.csdn.net/jwybobo2007/article/details/7242307博主方法直接在windows平台上用arm-none-linux-gnueabi-g++编译boost,按要求修改了project-config.jam文件中“using
gcc : arm : arm-none-linux-gnueabi-gcc ; ”,但编译时却总报“unrecognized command line option '-mthreads'”,无奈,知识有限,不知怎么解决,所以放弃了,转向linux平台。
于是得使用虚拟机上的linux系统ubantu来编译,开始是用的普通的g++4.8编译来编译boost的system库,编译完libboost_system.so.1.55.0后拿到windows平台上链接,报不兼容的库文件,才想起这个库是intel32程序库,不是目标arm库,于是又去linux系统安装交叉编译器arm-none-linux-gnueabi-g++4.6.3.bin,用它来再次编译出arm上的libboost_system.so.1.55.0库,这次回到windows平台上使用才链接成功。步骤如下:
命令行中运行:./bootstrap.sh #此步生成b2、bjam、project-config.jam文件
修改project-config.jam中:using gcc : arm : arm-none-linux-gnueabi-g++ ; #此步arm-none-linux-gnueabi-g++最好用全路径
命令行中运行:./bjam --with-system link=shared variant=released threads=multi #b2和bjam貌似是一样的。
2.arm-none-linux-gnueabi-g++4.6.3编译websocket++程序:
websocket++库本身都是模板,不需要编译,可在自己的项目中直接引用就行。因websocket++依赖boost,而boost里有很多地方用到c++11的新特性关键字noexcept,可能是arm-none-linux-gnueabi-g++4.6.3不支持吧,总报错,于是在引用websocket++头文件之前要先定义宏:#define BOOST_NO_CXX11_NOEXCEPT,以去掉noexcept关键字。然后编译成功.
相关文章推荐
- boost相关小知识(长期顶置更新)
- 提升Python程序运行效率的6个方法
- cocos2dx 交叉编译 iconv库 protobuf库
- C++单元测试:boost.test
- boost asio学习笔记 [1] - 同步通讯
- boost_asio学习笔记[2] - 客户端异步通讯
- boost::flat_map性能测试
- Ubuntu下如何安装boost?
- How to get a boost::shared_ptr from this
- Android 内核源代码交叉编译
- Android内核源码交叉编译
- boost 库 enable_shared_from_this 实现原理分析
- boost bind使用指南
- ARM Linux 交叉编译 工具链 制作攻略
- 使用boost进行CRC64计算
- [网络开发]boost::asio简介
- Windows下如何编译使用boost?
- Boost库学习(0)
- Boost库学习(1)log和unittest
- Boost库学习(2)thread 1