交叉編譯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開發板上執行

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