交叉编译过程中常遇见的问题

1、Find_package没有对应的cmake文件怎么处理?

SET(fastrtps_DIR /home/share/Lib_DIR)不行,

Find_package运行成功的最终目的是 在工程的顶层目录中的CMakeLists.txt 文件添加 include_directories(XXX_INCLUDE_DIRS) 来包含库的头文件,添加target_link_libraries(XXX_LIBRARIES)命令将源文件与库文件链接起来。

所以如果我们知道要链接的头文件和库路径,手动在cmakelist中添加两个目录就可以解决了

include_directories(/home/share/Lib_DIR/include)

link_directories(/home/share/Lib_DIR/lib)

2、is not able to compile a simple test program?

这种情况大概率是编译器或编译器环境没指定正确,检查下CC,GCC,和sysroot

cmake编译的话可以在cmakelist添加这三项内容

set(CMAKE_CXX_COMPILER "xxx_g++")
set(CMAKE_C_COMPILER "xxx_gcc")
set(CMAKE_SYSROOT sysroot_DIR),CMAKE_SYSROOT指定的目录下一般是/etc /lib /usr /var

3、有关交叉编译私有库目录的指定

#指定交叉编译环境,库和头文件的安装目录

SET(CMAKE_FIND_ROOT_PATH "/opt/arm-oe-linux-gnueabi/armv7")

也可以添加多个目录,set(CMAKE_FIND_ROOT_PATH path1 path2 path3 ...)

CMAKE_FIND_ROOT_PATH_MODE_PROGRAM:如果设置为 NEVER,那么 CMAKE_FIND_ROOT_PATH 就不会对 FIND_PROGRAM() 产生影响, FIND_PROGRAM() 不会在 CMAKE_FIND_ROOT_PATH 指定的目录中寻找;如果设置为 ONLY,那么 FIND_PROGRAM() 只会从CMAKE_FIND_ROOT_PATH 指定的目录中寻找;如果设置为 BOTH,那么 FIND_PROGRAM() 会优先从 CMAKE_FIND_ROOT_PATH 指定的目录中寻找,再从默认的目录中寻找。CMAKE_FIND_ROOT_PATH_MODE_LIBRARY,CMAKE_FIND_ROOT_PATH_MODE_INCLUDE,CMAKE_FIND_ROOT_PATH_MODE_PACKAGE也是同理。

常用的交叉编译配置如下

#从来不在指定目录下查找工具程序
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_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

4、常用的configure编译参数

--host= 指定编译产物运行的系统

--prefix= 指定编译产物输出目录

CC= 指定gcc

--with-sysroot= 指定交叉编译的sysroot目录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值