【jetson交叉编译(2)】jetson orin 交叉编译报错: /lib/ld-linux-aarch64.so.1: No such file or directory
按照之前博客的方案2准备了环境
背景
按照之前博客【nvidia jetson 系列开发板交叉编译方法,CUDA依赖程序】的方案2准备了环境。
交叉编译的文件系统在/var/files/yanyixiong/jetp512EnvComp0820
然后配置set(CMAKE_SYSROOT /var/files/yanyixiong/jetp512EnvComp0820)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(MY_PATH "/var/files/yanyixiong/jetp512EnvComp0820/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin")
set(MY_PATH_SYSROOT "/var/files/yanyixiong/jetp512EnvComp0820")
#set(CMAKE_FIND_ROOT_PATH "/var/files/yanyixiong/jetp512EnvComp0820")
set(CMAKE_SYSROOT /var/files/yanyixiong/jetp512EnvComp0820)
set(CMAKE_C_COMPILER ${MY_PATH}/aarch64-linux-gnu-gcc )
set(CMAKE_CXX_COMPILER ${MY_PATH}/aarch64-linux-gnu-g++ )
set(CMAKE_ASM_COMPILER ${MY_PATH}/aarch64-linux-gnu-as)
set(CMAKE_ASM_COMPILER_AR ${MY_PATH}/aarch64-linux-gnu-gcc-ar)
set(CMAKE_ASM_COMPILER_RANLIB ${MY_PATH}/aarch64-linux-gnu-gcc-ranlib)
set(CMAKE_CXX_COMPILER_AR ${MY_PATH}/aarch64-linux-gnu-gcc-ar)
set(CMAKE_CXX_COMPILER_RANLIB ${MY_PATH}/aarch64-linux-gnu-gcc-ranlib)
set(CMAKE_C_COMPILER_AR ${MY_PATH}/aarch64-linux-gnu-gcc-ar)
set(CMAKE_C_COMPILER_RANLIB ${MY_PATH}/aarch64-linux-gnu-gcc-ranlib)
set(CMAKE_LINKER ${MY_PATH}/aarch64-linux-gnu-ld)
set(CMAKE_STRIP ${MY_PATH}/aarch64-linux-gnu-strip)
set(CMAKE_RANLIB ${MY_PATH}/aarch64-linux-gnu-ranlib)
set(CMAKE_OBJCOPY ${MY_PATH}/aarch64-linux-gnu-objcopy)
set(CMAKE_OBJDUMP ${MY_PATH}/aarch64-linux-gnu-objdump)
set(CMAKE_READELF ${MY_PATH}/aarch64-linux-gnu-readelf)
set(CMAKE_AR ${MY_PATH}/aarch64-linux-gnu-ar)
set(CMAKE_NM ${MY_PATH}/aarch64-linux-gnu-nm)
交叉编译报错:
-- Check for working C compiler: /usr/bin/aarch64-linux-gnu-gcc-9 - broken
CMake Error at /usr/local/share/cmake-3.30/Modules/CMakeTestCCompiler.cmake:67 (message):
The C compiler
"/usr/bin/aarch64-linux-gnu-gcc-9"
is not able to compile a simple test program.
It fails with the following output:
Change Dir: '/var/files/yanyixiong/jetp512EnvComp0820/OEM/testtrt/build/CMakeFiles/CMakeScratch/TryCompile-7WqLi5'
Run Build Command(s): /usr/local/bin/cmake -E env VERBOSE=1 /var/files/yanyixiong/jetp512EnvComp0820/usr/bin/make -f Makefile cmTC_6cd87/fast
/lib/ld-linux-aarch64.so.1: No such file or directory
解决思路
1、确定 ld-linux-aarch64.so.1 位置
在文件系统 /var/files/yanyixiong/jetp512EnvComp0820 的 /lib/ld-linux-aarch64.so.1下
那就软连接过去:ln -s /var/files/yanyixiong/jetp512EnvComp0820/lib/ld-linux-aarch64.so.1 /lib/ld-linux-aarch64.so.1
2、避免出现 version `GLIBC_2.27' not found (required by ./make)的问题
应该把环境变量配置下:
export LD_LIBRARY_PATH=/var/files/yanyixiong/jetp512EnvComp0820/usr/lib/aarch64-linux-gnu/:$LD_LIBRARY_PATH
检查下
$ echo ${LD_LIBRARY_PATH}
/var/files/yanyixiong/jetp512EnvComp0820/usr/lib/aarch64-linux-gnu
然后 cmake 正常
cmake ../ -DCMAKE_TOOLCHAIN_FILE=../cross_compile.cmake
3、避免出现warning: libdl.so.2, needed by libcudart.so, not found (try using -rpath or -rpath-link)
我们先用find //var/files/yanyixiong/jetp512EnvComp0820/usr -name 'libdl.so.2'确定库的地址,然后-rpath-link,上去.
应该在CmakeLists配置下
target_link_options(tensorrt_yolov6 PRIVATE "-Wl,-rpath-link,${CMAKE_SYSROOT}/usr/lib/aarch64-linux-gnu")
target_link_options(tensorrt_yolov6 PRIVATE "-Wl,-rpath-link,${CMAKE_SYSROOT}/usr/lib/aarch64-linux-gnu/tegra")
target_link_options(tensorrt_yolov6 PRIVATE "-Wl,-rpath-link,${CUDA_PATH}/lib64")
在这个例子中,-Wl,-rpath-link,/path/to/your/libraries被添加到了MyTarget的链接选项中。-Wl,是CMake用来将后面的参数传递给链接器的标志,而-rpath-link则告诉链接器在链接时去指定的目录中寻找库文件。
4、避免交叉编译gcc 找不到stl
交叉编译器在这里:/var/files/yanyixiong/jetp512EnvComp0820/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu。
我该如何使用他的stl库?解决对‘std::random_device::_M_getentropy() const@GLIBCXX_3.4.25’未定义的引用?
target_link_options(MyTarget PRIVATE "-static-libstdc++")
请注意,并非所有 GCC 版本都支持 -static-libstdc++。如果您的编译器不支持此选项,您将需要找到其他方法来静态链接标准库,或者确保动态库在目标平台上可用。
经过这4步,应该问题都处理完了。
5、代码分享
https://gitee.com/hiyanyx/study-jetson-orin-cross-compile-yolov6-v1-cpp-cmake
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)