最近使用嵌入编程时需要使用websocket。在github上查找开源库时,主要有两个库点赞比较高的,其中一个是websocketpp这个库。此库需要使用boost库进行编译。所以本文章主要介绍boost库的交叉编译和在程序中使用websocketpp。
boost库交叉编译
从boost官网上下载最新的boost库boost官网
等待下载完成之后,放入到虚拟机中(ubuntu),使用命令:tar jxvf boost_1_73_0.tar.bz2 将其解压。
cd boost_1_73_0
./bootstrap.sh --show-libraries //查看当前boost库中已经包含的库
/bootstrap.sh --prefix=/home/mjf/lib //使用此命令可以指定boost库的安装如果不使用默认路径是 /usr/local/include 和 /usr/local/lib,分别存放头文件和各种库
完成以上指令后,需要修改文件“project-config.jam”,在其中找到以下内容
注意以上图片是已经修改过的交叉编译器。注意红框标注的是空格。
保存之后,执行以下命令:
./b2
./b2 install
在你之前指定的路径下会有boost库的头文件生成。
websockpp使用
下载路径:websocketpp
下载之后将文件夹“websocketpp”放入到include的文件夹下。
在文件夹“examples\broadcast_server”中找到广播的例子。
然后使用命令
/home/keda/xugong/staging_dir/toolchain-arm_cortex-a9+neon_gcc-7.3.0_musl_eabi/bin/arm-openwrt-linux-g++ broadcast_server.cpp -I ./include/ -I /home/keda/boost_lib/boost_zigbee_lib/include/ -L /home/keda/boost_lib/boost_zigbee_lib/lib -o test_websocket
此时虽然能编译通过。但是会有以下报错警告:
note: parameter passing for argument of type '__gnu_cxx::__normal_iterator<P2d*, std::vector<P2d> >' changed in GCC 7.1
_M_realloc_insert(end(), __x);
和
/opt/armv7-gcc-2017/arm-linux-gnueabihf/include/c++/7.2.0/bits/vector.tcc:105:21: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator<cpzparser::Anchor*, std::vector<cpzparser::Anchor> >' changed in GCC 7.1
_M_realloc_insert(end(), std::forward<_Args>(__args)...);
要么
/opt/armv7-gcc-2017/arm-linux-gnueabihf/include/c++/7.2.0/bits/vector.tcc:394:7: note: parameter passing for argument of type 'std::vector<cpzparser::PointEntity>::iterator {aka __gnu_cxx::__normal_iterator<cpzparser::PointEntity*, std::vector<cpzparser::PointEntity> >}' changed in GCC 7.1
vector<_Tp, _Alloc>::
该警告告诉您,在6和7.1之间存在一个微妙的ABI更改(实际上是一致性修复),因此当使用7.x构建的代码调用时,使用6.x或更早版本构建的库可能无法正常工作(并且反之亦然)。 只要您的所有C ++代码都是使用GCC 7.1或更高版本构建的,就可以安全地忽略此警告。 要禁用它, -Wno-psabi 传递给编译器。
在编译成功只有,直接运行即可启动一个广播的websocket服务器。更多例子可以参数例子文件夹下的内容。