fastdds交叉编译

fastdds版本很多,其中有两个地方需要注意:

  1. 1.7.0版本,更新了idl 生成代码的工具。如果有使用idl生成的代码,从1.7.0之前切换到1.7.0(包含)之后,需要用新工具重新生成代码
  2. 1.10.0开始支持shared memory

我编译的是fastdds2.1.1版本。步骤如下:

1. tinyxml2

git clone https://github.com/leethomason/tinyxml2.git

只编译静态库

cmake -C $CMAKE_CONFIG . -DCMAKE_INSTALL_PREFIX=$PROJ_TARGET -DBUILD_SHARED_LIBS=OFF

make $1 && make install

Note:CMAKE_CONFIG是一个配置文件xxx.cmake, 可以在里面指定编译工具链,以及编译参数等

2. asio

通过https://sourceforge.net/projects/asio/下载源码

asio只用到头文件,可以直接指定路径,也可以选择编译。编译按照如下命令:

./configure --build=$BUILD_ARC --host=$HOST_ARC CC=$CC_DIR CXX=$CXX_DIR --prefix=$PROJ_TARGET
make $1 && make install

3. fastrtps

git clone https://github.com/eProsima/Fast-CDR.git

切换到v1.0.21 : git checkout v1.0.21

编译:

make -C $CMAKE_CONFIG . -DCMAKE_INSTALL_PREFIX=$PROJ_TARGET
make $1 && make install

4. foonathan_memory

fastdds的readme中是说从https://github.com/eProsima/foonathan_memory_vendor.git下载,但是这里下载并不包含源码,在编译过程中会去到https://github.com/foonathan/memory.git下载,而且这样有两个问题:

  • 编译过程中经常下载失败,导致编译失败
  • 编译过程中需要替换文件,而由于代码在编译过程中会自动更新,修改会失效。

所以建议直接git clone https://github.com/foonathan/memory.git

编译:

编译过程中会先生成nodesize_dbg,需要在目标平台上运行,生成container_node_sizes_impl.hpp,

如果目标平台就是arm,那么编译过程中运行nodesize_dbg会失败。

编译脚本如下:

if [[ $HOST_ARC =~ x86 ]]; then
    echo "target is x86, run nodesize_dbg during building"
else
    cp ./node_size_pre/$TARGET_TYPE/container_node_sizes_impl.hpp ./src/
fi
#define FOONATHAN_MEMORY_BUILD_TOOLS, then will build nodesize_dbg and run it to generate container_node_sizes_impl.hpp
if [[ $HOST_ARC =~ x86 ]]; then
    cmake -C $CMAKE_CONFIG . -DCMAKE_INSTALL_PREFIX=$PROJ_TARGET -DFOONATHAN_MEMORY_BUILD_TOOLS=ON
else
    cmake -C $CMAKE_CONFIG . -DCMAKE_INSTALL_PREFIX=$PROJ_TARGET -DFOONATHAN_MEMORY_BUILD_TOOLS=ON
fi
make $1 && make install

对于arm平台,首先要创建container_node_sizes_impl.hpp,步骤:

  1. 带上 -DFOONATHAN_MEMORY_BUILD_TOOLS=ON编译,编译会失败,但是我们要的nodesize_dbg已经生成,
  2. 在目标机器上执行./nodesize_dbg --code container_node_sizes_impl.hpp
  3. 将创建文件/node_size_pre/$TARGET_TYPE,将生成的container_node_sizes_impl.hpp分别放到对应平台文件夹下。 

之后正常编译的时候,arm平台移除-DFOONATHAN_MEMORY_BUILD_TOOLS=ON,改成

if [[ $HOST_ARC =~ x86 ]]; then
    cmake -C $CMAKE_CONFIG . -DCMAKE_INSTALL_PREFIX=$PROJ_TARGET -DFOONATHAN_MEMORY_BUILD_TOOLS=ON
else
    cmake -C $CMAKE_CONFIG . -DCMAKE_INSTALL_PREFIX=$PROJ_TARGET
fi

注意:1. 编译静态库不要加-fPIC 编译选项。

  1. 运行的时候如果报这样的错误:

[foonathan::memory] Allocator foonathan::memory::memory_pool (at 0x560d1f019ee8) received invalid size/alignment 56, max supported is 48

terminate called after throwing an instance of 'foonathan::memory::bad_node_size'

  what():  allocation node size exceeds supported maximum of allocator

Aborted (core dumped)

那么就是container_node_sizes_impl.hpp不对,或者是编译的是静态库且加了-fPIC

5. openssl (这个也可以不要,参考下面fastdds编译)

编译出libssl.so与libcrypto.so

     注意:需要临时手动拷贝libssl.so、libcrypto.so以及openss/include下面的3个文件夹到/usr/local/include下面    

因为编译fastdds的时候,总是会去/usr/local下去找。这个问题我一直没有解决。有兴趣的可以去研究下cmake的find_package

6. fastdds

git clone https://github.com/eProsima/Fast-DDS.git

切换到v2.1.1: git checkout v2.1.1

如果不要openssl的话,,需要注释掉find_package(OpenSSL)

if(SECURITY)
    find_package(OpenSSL REQUIRED)
else()
    #find_package(OpenSSL)
endif()
cmake -C $CMAKE_CONFIG . -DCMAKE_INSTALL_PREFIX=$PROJ_TARGET -DCOMPILE_EXAMPLES=ON
make $1 && make install

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值