Vsomeip交叉编译(AARCH64)中涉及到的boost移植

        最近在做arm交叉编译,其中需要用到boost库。问题随之而来,记录一下细节以及网上文章疏忽的知识点。

        1,boost中的版本不同,导致头文件中的内容也有所不同。所以当移植库使用了boost,一定要注意boost的版本。

              vsomeip中使用的boost库是要求大于等于boost 1.55,随后在host为x86的主机上也使用过boost 1.58。在x86主机上本地编译都没有问题。但是用aarch64-poky-linux-gXX 发现编译报错,编译器无法识别 “-m64” 选项。随后在host为x86的主机上使用boost1.65 和 1.68两个版本,交叉编译都没有问题。

        2,boost版本的中boost文件夹下的头文件也会随着版本的迁移,发生改变。

              vsomeip中使用boost的asio库,这个库只有头文件,类似EIGEN,但是功能还是比较强的。boost1.55和boost1.65中,asio下面有个文件夹 detail/addressof.hpp,这boost1.68中是没有的。

       3,boost交叉编译中最主要的两点:

             (1),bjam是可执行文件,是在host机器上运行的程序。不要在设置CC=aarch64-poky-linux-gXX CPP=aarch64-poky-linux-gXX这样的环境中进行编译,就算编译了,但是最后生成的是aarch64的可执行文件,在host为x86的机器上是无法运行的。

             (2),一定要看bootstrap.sh中生成的文件:project-config.jam

               网上很多文章只写了 using   gcc : : path_to_your_cross_compile/aarch64-poky-linux-gXX。但是千万不要忘记修改:

               option.set libdir : path_to_your_cross_compiler/usr/lib ;
               option.set includedir : path_to_your_cross_compiler/include ;

               利用交叉编译工具链的同时告诉交叉编译器到arm64的环境中去寻找相关的头文件和库。否则还是利用本机的c++头文件和库。最后生成出来的libboot*.so会减少。我碰到情况是无法生成libboot_thread.so。

      4,最后其实不是很繁琐,上面的过程有了,就是写一个CMAKE_TOOLCHAIN_FILE=的cmak对象:

        set( BOOST_ROOT             path_to_boost/boost/boost_1_65_1 )
        set( BOOST_INCLUDEDIR  path_to_boost/boost/boost_1_65_1/boost )
        set( BOOST_LIBRARYDIR  path_to_boost/boost/boost_1_65_1/stage/libs )

        同时注意一下:

        set( CMAKE_C_FLAGS      "-march=armv8-a -mtune=cortex-a57.cortex-a53 --sysroot=path_to_sysroot")
        set( CMAKE_CXX_FLAGS "-march=armv8-a -mtune=cortex-a57.cortex-a53 --sysroot=path_to_sysroot")

        最后执行cmake make

你可能感兴趣的:(arm)