交叉编译zeromq

一:查看官网,是否支持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开发板上执行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章