一:查看官網,是否支持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開發板上執行