You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CLion生成错误CMake命令:arm交叉编译时链接报错

解决CLion交叉编译ARM时出现cannot find entry symbol arch_paths_first的问题

我之前也碰到过类似的情况,核心问题是CMake在Mac宿主环境下默认添加了Darwin(Mac OS)特有的链接选项,而你的交叉ARM编译器不识别这个选项。下面是具体的解决方法:

方法1:正确配置交叉编译工具链文件(推荐)

CMake如果不知道你是在做交叉编译,就会默认用宿主系统(Mac)的链接规则,所以第一步要明确告诉CMake目标系统是Linux。

  1. 创建一个工具链文件,比如arm-linux-musleabihf.toolchain.cmake,内容如下:
# 指定目标系统和架构
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

# 设置交叉编译器路径
set(CMAKE_C_COMPILER arm-linux-musleabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-musleabihf-g++)

# 清空Darwin特有的初始链接选项
set(CMAKE_EXE_LINKER_FLAGS_INIT "")
set(CMAKE_SHARED_LINKER_FLAGS_INIT "")
set(CMAKE_MODULE_LINKER_FLAGS_INIT "")

# 可选:设置目标系统的根目录(如果有sysroot的话)
# set(CMAKE_SYSROOT /path/to/arm-linux-musleabihf/sysroot)
  1. 在CLion中配置这个工具链:
    • 打开Settings -> Build, Execution, Deployment -> CMake
    • 在CMake options里添加:-DCMAKE_TOOLCHAIN_FILE=/绝对路径/arm-linux-musleabihf.toolchain.cmake
    • 点击Apply后重新生成CMake缓存,此时link.txt里就不会再出现-Wl,-search_paths_first了

方法2:直接在CMakeLists.txt中移除错误选项

如果不想用工具链文件,也可以手动从链接参数里删掉那个Mac特有的选项:

在你的CMakeLists.txt中,project()指令之后添加以下代码:

# 检查是否是Mac宿主环境,移除Darwin特有的链接选项
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
    # 从C++链接 flags 中移除
    string(REPLACE "-Wl,-search_paths_first" "" CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
    # 从可执行文件链接 flags 中移除
    string(REPLACE "-Wl,-search_paths_first" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
endif()

为什么会出现这个问题?

Eclipse中编译正常是因为你手动配置了交叉编译的所有参数,没有引入Mac的链接选项;而CLion依赖CMake自动生成构建规则,CMake在检测到宿主是Mac时,会默认给链接器加上-Wl,-search_paths_first(这是Mac的ld用来控制搜索路径顺序的选项),但你的ARM交叉链接器arm-linux-musleabihf-ld根本不认识这个选项,所以才会报cannot find entry symbol arch_paths_first的错误。

内容的提问来源于stack exchange,提问作者Marcin Zdunek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:12:42