一、前言
项目需要编译一些Arm版本的三方库,其中Fast-DDS这个库依赖很多,比较难搞,踩了一些坑,做个记录。
二、源码下载
Fast-DDS版本:2.6.1
依赖库版本如下:
1、asio-1.26.0
2、Fast-CDR-1.0.24
3、foonathan_memory_vendor-1.2.1
4、tinyxml2-9.0.0
下载地址可以参考这个老哥:
https://blog.csdn.net/ouyang035/article/details/127898625
三、编译
编译前先将自己的交叉编译工具链添加到环境变量,具体方法在openssl交叉编译的文章中有详细描述。
整体的编译思路是把四个依赖的库分别使用交叉编译工具编译出arm版本的库并install到同一个目录中,然后在编译fast-dds时,会从install中找到依赖的文件。
1、asio-1.26.0
cd asio-1.26.0
./configure --host=aarch64-linux --prefix=/usr/local
make install
2、Fast-CDR-1.0.24
cd Fast-CDR-1.0.24
mkdir build && cd build
cmake -DCMAKE_C_COMPILER=/home/tools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc \
-DCMAKE_CXX_COMPILER=/home/tools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++ \
-DBUILD_SHARED_LIBS=ON ..
make install
3、foonathan_memory_vendor-1.2.1
这个需要联网,而且要修改cmakelist内容
-DCMAKE_CXX_FLAGS=-fPIC
-DCMAKE_CXX_COMPILER=aarch64-none-linux-gnu-g++
-DCMAKE_C_COMPILER=aarch64-none-linux-gnu-gcc
cd foonathan_memory_vendor-1.2.1
mkdir build && cd build
cmake -DCMAKE_C_COMPILER=/home/tools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc \
-DCMAKE_CXX_COMPILER=/home/tools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++ \
-DBUILD_SHARED_LIBS=ON ..
make install
4、tinyxml2-9.0.0
cd tinyxml2-9.0.0
mkdir build && cd build
cmake -DCMAKE_C_COMPILER=/home/tools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc -DCMAKE_CXX_COMPILER=/home/tools/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++ -DBUILD_SHARED_LIBS=ON ..
make install
5、Fast-DDS-2.6.1
编辑cmakelist 注释openssl
cd Fast-DDS-2.6.1
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=~/Fast-DDS/install/
make install
四、总结
交叉编译Fast-DDS比较麻烦,需要注意foonathan_memory_vendor-1.2.1这个三方库,挺恶心的,因环境和版本的原因,无法保证你按照上述方法一定能成功,希望能帮助到你,多一份参考,多一点成功的概率。