一:查看官网,是否支持arm32位,结论为支持。
二:源码zeromq-4.1.6.tar.gz放入虚拟机并解压
1.首先要阅读的就是README,然后看一下INSTALL文件,这个文件里编译源码包的步骤。
2.基本三步走:configure,make,make install。
3../configure配置
使用./configure -h查看文档。
对于交叉编译,主要就是有三个参数:--build --host --target
--build参数是指你编译源码包的系统环境,可以通过查看系统的环境变量来获取,执行set命令可以看到 MACHTYPE=i686-pc-linux-gnu,则--build=i686-pc-linux-gnu
--host参数指的是编译出来的工具运行在什么系统上
--target参数指的是编译出的工具所要操作的系统,譬如说在虚拟机上编译gdb,这个gdb需要查看的是arm开发板的core文件(在虚拟机上查看),这个必须要理解明白,比如说我编译出来的gdb要在我的电脑上运行,但是要调试交叉编译出来的arm指令集的程序,这个时候呢,--target就要是arm-linux,但是--host是i686-pc-linux-gnu。
三:配置编译
./configure --build=i686-pc-linux-gnu --host=arm-linux --target=arm-linux --prefix=/opt/arm-zeromq/ --without-libsodium
make && make install
四:运行
1.虚拟机上readelf -d libzmq.so查看依赖库
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [librt.so.1]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x0000000e (SONAME) Library soname: [libzmq.so.5]
将交叉编译器中的依赖库拷贝到目标开发板:/opt/depend(为什么要考动态库,是因为开发板的动态库和工具链里的动态库不是一个大版本...郁闷...)
同时设置:export LD_LIBRARY_PATH=/opt/depend(这里因为libzmq.so本身加载还依赖同文件夹下的库文件,所以要设置路径)
在虚拟机中下载官网提供的service和client测试代码,编译:
$CC service_test.cpp -I/opt/arm-zeromq/include -I/opt/gcc-linaro-7.4.1-2019.02-i686_arm-linux-gnueabihf(使用交叉工具链中的头文件) -Wl,-rpath=/opt/arm-zeromq/depend_so -L /opt/arm-zeromq/lib -lzmq -o service_test
$CC client_test.cpp -I/opt/arm-zeromq/include -I/opt/gcc-linaro-7.4.1-2019.02-i686_arm-linux-gnueabihf(使用交叉工具链中的头文件) -Wl,-rpath=/opt/depend_so -L /opt/arm-zeromq/lib -lzmq -g -o client_test
放到arm-linux开发板上执行