【发布时间】:2015-02-11 10:09:23
【问题描述】:
我正在使用 CMake 构建两个共享库(.so 文件)。它们被构建到单独的目录中,但在安装步骤中,它们会将副本复制到同一目录中。其中一个与另一个链接。两者都是从另一个进程动态加载的。
第一个问题是显然 CMake 没有在 OS X 上的 .so 文件上设置 rpath(未在其他平台上测试)。在CMakeLists.txt我有
set(CMAKE_INSTALL_PREFIX ../dist)
set(MACOSX_RPATH YES)
set(INSTALL_NAME_DIR YES)
两个库的 CMakeLists.txt 文件被包含使用
add_subdirectory(./a "${CMAKE_BINARY_DIR}/a")
add_subdirectory(./b "${CMAKE_BINARY_DIR}/b")
但是在生成的.so 文件上运行otool -l 显示没有LC_RPATH 条目。
另外,需要在 RPath(a)中设置哪个路径,以便当链接器加载 a.so 时,它可以找到位于同一目录 (dist/) 中的 b.so。加载a 的可执行文件位于不同的位置。
我尝试了@executable_path/、@executable_path/../、@origin/../,但似乎都没有。
【问题讨论】:
标签: macos linker cmake makefile dyld