windows平台上用arm-none-linux-gnueabi-g++4.6.3交叉编译websocket++

时间:2021-04-16 09:11:00
          工作中遇到在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关键字。然后编译成功.