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

CMake构建macOS动态库时如何禁用RPATH并改用@executable_path

CMake配置macOS动态库install name的实现方案

完全可以通过CMake原生配置在构建流程中直接实现动态库库标识的修改,无需构建完成后手动执行install_name_tool操作。

实现原理

macOS平台下,动态库的标识(也就是otool -L查询到的库自身路径记录)是在链接阶段通过-install_name参数写入二进制头的。CMake默认会为构建生成的动态库自动追加@rpath作为标识前缀,我们只需要在CMake配置中显式指定目标的相关属性,就能控制链接阶段的写入值。

具体配置

在原有的CMakeLists.txt基础上,为simpleLibrary目标追加属性配置即可,修改后的完整配置如下:

cmake_minimum_required(VERSION 3.11)
project(simpleLibrary)
set(CMAKE_CXX_STANDARD 17)
add_library(simpleLibrary SHARED main.cpp)

# 配置动态库标识为@executable_path前缀
set_target_properties(simpleLibrary PROPERTIES
    # 指定动态库的install name路径,替换默认的@rpath前缀
    INSTALL_NAME_DIR "@executable_path"
    # 让构建目录下的产物直接使用上述install name配置
    BUILD_WITH_INSTALL_RPATH ON
)

配置项说明

  • INSTALL_NAME_DIR "@executable_path":直接指定动态库自身标识的路径前缀,CMake会在链接阶段自动传递对应的-install_name参数到编译器,最终生成的dylib标识会直接使用该路径
  • BUILD_WITH_INSTALL_RPATH ON:该配置为必要项——CMake默认对未执行安装的构建目录产物,会使用内置的构建期rpath规则生成动态库标识,开启该开关后,构建阶段生成的dylib会直接套用你配置的INSTALL_NAME_DIR值,不会默认追加@rpath前缀

效果验证

完成配置后重新编译,再次进入cmake-build-debug目录执行otool -L libsimpleLibrary.dylib,输出的第一行库标识就会变为:

libsimpleLibrary.dylib:
        @executable_path/libsimpleLibrary.dylib (compatibility version 0.0.0, current version 0.0.0)

和手动执行install_name_tool -id @executable_path/libsimpleLibrary.dylib的修改效果完全一致,且全程在CMake构建流程内完成,无需额外的后处理脚本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 20:54:03