cross compile ros2 for arm64 board
Hello, all, I have some problems when I cross compile ros2 master branch from source for my arm64 board.
Fist my command: colcon build \ --cmake-force-configure \ --merge-install \ $target \ --cmake-args \ --no-warn-unused-cli \ -DCMAKETOOLCHAINFILE=$cmakefile \ -DCMAKEVERBOSEMAKEFILE:BOOL=ON \ -DBUILDTESTING:BOOL=OFF \ -DTHIRDPARTY=ON \ -DSECURITY=OFF
Second CMake toochain file:
set(CMAKESYSTEMNAME Linux) set(CMAKESYSTEMVERSION 1) set(CMAKESYSTEMPROCESSOR aarch64)
specify the cross compiler
set(CMAKECCOMPILER $ENV{CROSSCOMPILE}gcc) set(CMAKECXXCOMPILER $ENV{CROSSCOMPILE}g++)
set(CMAKEFINDROOTPATH ${CMAKECURRENTLISTDIR}/install) set(CMAKEFINDROOTPATHMODEPROGRAM NEVER) set(CMAKEFINDROOTPATHMODEPACKAGE ONLY) set(CMAKEFINDROOTPATHMODELIBRARY ONLY) set(CMAKEFINDROOTPATHMODEINCLUDE ONLY)
And I didn't set CMAKE_SYSROOT , because what I build have not outside dependencies except the cross toolchain.
Now The problem is although I can successfully compile all so library, ld program failed when find these so library.
Starting >>> examplesrclcppminimalpublisher
--- stderr: examplesrclcppminimalpublisher
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/hostbin/../lib/gcc/aarch64-linux-gnu/6.3.0/../../../../aarch64-linux-gnu/bin/ld: warning: libfastrtps.so.1, needed by /home/zhouchengming/ros2arm/ros2ws/install/lib/librclinterfacesrosidltypesupportfastrtpsc.so, not found (try using -rpath or -rpath-link)
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/hostbin/../lib/gcc/aarch64-linux-gnu/6.3.0/../../../../aarch64-linux-gnu/bin/ld: warning: libfastcdr.so.1, needed by /home/zhouchengming/ros2arm/ros2ws/install/lib/librcl_interfacesrosidltypesupportfastrtpsc.so, not found (try using -rpath or -rpath-link)
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/hostbin/../lib/gcc/aarch64-linux-gnu/6.3.0/../../../../aarch64-linux-gnu/bin/ld: warning: libPocoFoundation.so.50, needed by /home/zhouchengming/ros2arm/ros2ws/install/lib/librmwimplementation.so, not found (try using -rpath or -rpath-link)
/home/zhouchengming/ros2arm/ros2ws/install/lib/librclinterfacesrosidltypesupportfastrtpscpp.so: undefined reference to `eprosima::fastcdr::Cdr::setState(eprosima::fastcdr::Cdr::state&)'
/home/zhouchengming/ros2arm/ros2ws/install/lib/librclinterfacesrosidltypesupportfastrtps_cpp.so: undefined reference to `eprosima::fastcdr::Cdr::state::state(eprosima::fastcdr::Cdr const&)'
I review the Makefile created by colcon and I found that g++ don't even link these library ...
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-g++ CMakeFiles/publishernotcomposable.dir/notcomposable.cpp.o -o publishernotcomposable /home/zhouchengming/ros2arm/ros2ws/install/lib/librclcpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librcl.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosidltypesupportfastrtpsc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosidltypesupportfastrtpscpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librclinterfacesrosidltypesupportc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librcl_interfacesrosidltypesupportcpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librclinterfacesrosidltypesupportfastrtpsc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librclinterfacesrosidlgeneratorc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librclinterfacesrosidltypesupportfastrtpscpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librclinterfacesrosidltypesupportintrospectionc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librclinterfacesrosidltypesupportintrospectioncpp.so -lpthread /home/zhouchengming/ros2arm/ros2ws/install/lib/librmwimplementation.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librmw.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librcutils.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librclloggingnoop.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosgraph_msgsrosidltypesupportcpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosgraphmsgsrosidltypesupportc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosgraphmsgsrosidlgeneratorc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosgraph_msgsrosidltypesupportintrospectioncpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosgraphmsgsrosidltypesupportintrospectionc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosgraphmsgsrosidltypesupportfastrtpsc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosgraphmsgsrosidltypesupportfastrtpscpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libyaml.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librclyamlparamparser.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libbuiltin_interfacesrosidltypesupportc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libbuiltininterfacesrosidltypesupportcpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libbuiltininterfacesrosidltypesupportfastrtpsc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libbuiltininterfacesrosidlgeneratorc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libbuiltininterfacesrosidltypesupportfastrtpscpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libbuiltininterfacesrosidltypesupportintrospectionc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libbuiltininterfacesrosidltypesupportintrospectioncpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosidltypesupportcpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosidltypesupportc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosidltypesupportintrospectioncpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosidlgeneratorc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/librosidltypesupportintrospectionc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libstdmsgsrosidltypesupportcpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libstdmsgsrosidltypesupportc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libstd_msgsrosidlgeneratorc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libstdmsgsrosidltypesupportintrospectioncpp.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libstdmsgsrosidltypesupportintrospectionc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libstdmsgsrosidltypesupportfastrtpsc.so /home/zhouchengming/ros2arm/ros2ws/install/lib/libstdmsgsrosidltypesupportfastrtpscpp.so
Only these so are in the g++ command, so I think if these package don't write their Cmakefiles correctly? they should write amentexportdependencies in the CMakefile ?
Asked by zcm on 2019-08-09 00:24:17 UTC
Comments