cmake 交叉编译防坑指南

cmake 交叉编译防坑指南

近来用cmake编译arm代码和第三方库遇到一些坑,在这里回顾一下,供大家借鉴。


cmake出现多层嵌套时的交叉编译指令

cmake -DMAKE_TOOLCHAIN_FILE=xxx.cmake .

xxx.cmake内需写明如下内容:

#告知当前使用的是交叉编译方式,必须配置
SET(CMAKE_SYSTEM_NAME Linux)

#指定C交叉编译器,必须配置 
SET(CMAKE_C_COMPILER "/opt/arm-oe-linux-gnueabi/bin/arm-oe-linux-gnueabi/arm-oe-linux-gnueabi-gcc")

#指定C++交叉编译器
SET(CMAKE_CXX_COMPILER "/opt/arm-oe-linux-gnueabi/bin/arm-oe-linux-gnueabi/arm-oe-linux-gnueabi-g++")

#CMAKE_SYSROOT只有在3.0以上的版本才有效
SET(CMAKE_SYSROOT "/opt/arm-oe-linux-gnueabi/armv7")
#SET(MYSYSROOT "/opt/arm-oe-linux-gnueabi/armv7")

#SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --sysroot=${MYSYSROOT}" CACHE INTERNAL "" FORCE)
#SET(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} --sysroot=${MYSYSROOT}" CACHE INTERNAL "" FORCE)
#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --sysroot=${MYSYSROOT}" CACHE INTERNAL "" FORCE)
#SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} --sysroot=${MYSYSROOT}" CACHE INTERNAL "" FORCE)

#指定交叉编译环境安装目录...
SET(CMAKE_FIND_ROOT_PATH "/opt/arm-oe-linux-gnueabi/armv7")

#从来不在指定目录下查找工具程序
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

#只在指定目录下查找库文件
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

#只在指定目录下查找头文件
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

可能存在的坑:如果你在交叉编译之前已经生成了非交叉编译的临时文件,需要将其删除。

单独一个cmake时直接替换环境变量

CC=arm-oe-linux-gnueabi-gcc CFLAGS="$CFLAGS --sysroot=/tbox/gcc-eglibc-locale-internal-arm-oe-linux-gnueabi-4.9.2/armv7/" cmake -D CMAKE_INSTALL_PREFIX=${INSTALL_DIR} ../cmake
可能存在的坑:sysroot加到CFLAGS里而不是使用 –with-sysroot 参数,如果编译过程既使用CC又使用CXX,也需设置CXXFLAGS。

编译第三方库指定选择生产库的属性(shared staic)

CMakeList.txt中添加一行

SET(BUILD_SHARED_LIBS ON)

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Linux上使用CMake进行交叉编译PySide2,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了CMake交叉编译工具链。根据您的目标平台,可能需要安装特定的交叉编译工具链。例如,在交叉编译ARM平台的情况下,您可能需要安装ARM交叉编译工具链。 2. 创建一个用于构建PySide2的目录,并进入该目录: ``` mkdir build cd build ``` 3. 设置交叉编译工具链: ``` export CC=<path_to_cross_compiler> export CXX=<path_to_cross_compiler> ``` 其中,`<path_to_cross_compiler>`是您安装的交叉编译工具链的路径。 4. 使用CMake生成Makefile,并指定交叉编译相关的参数: ``` cmake \ -DCMAKE_SYSTEM_NAME=<target_system_name> \ -DCMAKE_C_COMPILER_WORKS=1 \ -DCMAKE_CXX_COMPILER_WORKS=1 \ -DCMAKE_INSTALL_PREFIX=<install_prefix> \ <path_to_pyside2_source> ``` 其中,`<target_system_name>`是目标系统的名称(如arm-linux-gnueabi),`<install_prefix>`是PySide2安装的目标路径,`<path_to_pyside2_source>`是PySide2源代码的路径。 5. 运行make命令进行交叉编译: ``` make ``` 6. 编译完成后,您可以将生成的库文件和相关文件复制到目标系统上,并在目标系统上进行使用。 请注意,交叉编译可能涉及到更多的配置和设置,具体步骤可能因您的目标平台和工具链而有所不同。确保按照PySide2官方文档提供的指南进行操作,并根据需要进行调整。 如果您遇到任何问题,请随时提问!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值