许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Jetson NX交叉编译踩坑记录与解决

Jetson NX交叉编译踩坑记录与解决

阅读数 4
点赞 0
article_banner

1. 交叉编译工具链,编译出错

   使用官网上指定gcc-linaro编译工具,却出现如下错误:

aarch64-linux-gnu/libc/usr/include/stdio.h:47:1: error: '__BEGIN_NAMESPACE_STD' does not name a type; did you mean '__BEGIN_DECLS'?
 __BEGIN_NAMESPACE_STD
/data/jetson_depend/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/cwchar:64:11: error: '::mbstate_t' has not been declared
   using ::mbstate_t;
           ^~~~~~~~~
/data/jetson_depend/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/cwchar:141:11: error: '::btowc' has not been declared
   using ::btowc;
           ^~~~~
/data/jetson_depend/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/cwchar:142:11: error: '::fgetwc' has not been declared
   using ::fgetwc;
           ^~~~~~
/data/jetson_depend/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/cwchar:143:11: error: '::fgetws' has not been declared
   using ::fgetws;
           ^~~~~~
/data/jetson_depend/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/cwchar:144:11: error: '::fputwc' has not been declared
   using ::fputwc;
           ^~~~~~
/data/jetson_depend/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/cwchar:145:11: error: '::fputws' has not been declared
   using ::fputws;
           ^~~~~~
/data/jetson_depend/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/cwchar:146:11: error: '::fwide' has not been declared
   using ::fwide;
           ^~~~~
/data/jetson_depend/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/cwchar:147:11: error: '::fwprintf' has not been declared
   using ::fwprintf;
           ^~~~~~~~
/data/jetson_depend/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/cwchar:148:11: error: '::fwscanf' has not been declared
   using ::fwscanf;
           ^~~~~~~
/data/jetson_depend/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/cwchar:149:11: error: '::getwc' has not been declared
   using ::getwc;

*******

都是一些c++自己的符号没有找到,起初以为编译工具链的so路径找不到,export之后依然不行。

   偶然发现,ubuntu apt- get  有编译工具链,遂使用如下命令安装

apt-get install gcc-aarch64-linux-gnu
apt-get install g++-aarch64-linux-gnu

可正常编译。

2. find_path /find_library NOTFOUND
交叉编译toolchain.cmake设置如下

SET ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
SET ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )

由于忘记设置CMAKE_FIND_ROOT_PATH变量, 上述两个变量设置成ONLY后,find_* 只会在指定的目录中搜寻相关依赖so和include文件,所以一直显示NOTFOUND。如果设置为BOTH,可能会有HOST机器上和交叉编译链所需要的依赖相同,导致冲突。

3. cuda 交叉编译工具

   本来以为cuda和其他的依赖一样,只需要提供相关的include文件和so就好了,但是cu文件在编译的时候需要调用nvcc。
NVIDIA SDKManager工具中提供了Host上cuda交叉编译工具,下载安装就好了。

4. 运行无报错但是core dump

   交叉编译完成,在盒子上执行可执行文件,却出现core dump。ldd发现很多opencv的符号表找不到。是因为opencv库也是在host上交叉编译出来的,但是在盒子却不能使用。

   进行交叉编译时,依赖包最好在target机器上编译完成,再在host机器上交叉编译使用。依赖包如果在Host上使用交叉编译的方式,如果存在一些其他未知的依赖库,可能会导致,虽然编译完成,但依然无法加载。


Jetson NX 交叉编译cmake

#jetson_tookchain.cmake

# set cross-compiled system type, it's better not use the type which cmake cannot recognized.
SET ( CMAKE_SYSTEM_NAME Linux )
SET ( CMAKE_SYSTEM_PROCESSOR aarch64 )

set(DEPEND_LIB_PATHS "" CACHE PATH "The path of the library on which cross compilation depends")

if (NOT "${DEPEND_LIB_PATHS}" STREQUAL "")
    SET(CMAKE_FIND_ROOT_PATH "${DEPEND_LIB_PATHS}")
endif()

# set searching rules for cross-compiler
SET ( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET ( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
SET ( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )

SET ( CMAKE_C_COMPILER "${GCC_CHAIN_PATH}aarch64-linux-gnu-gcc" )
SET ( CMAKE_CXX_COMPILER "${GCC_CHAIN_PATH}aarch64-linux-gnu-g++" )

# message("${GCC_CHAIN_PATH}aarch64-linux-gnu-gcc")

option(JETSON "use jetson nx" ON)
option(CUDA_cudart_static_LIBRARY "use cudart static library" OFF)



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空