使用 CMake 链接到 OSX 下的可执行文件

linking to an executable under OSX with CMake

我有一个将由可执行文件加载的插件。

可执行文件导出符号,这里是可执行文件的一些 CMake:

set_target_properties(rcrl_compiler_tests PROPERTIES ENABLE_EXPORTS ON)

然后我 link 像这样:

target_link_libraries(test_plugin rcrl_compiler_tests)

这对 Windows 和 Linux 没问题。然而,对于 macOS,它不是。我读到我需要使用 -bundle_loader,如 ENABLE_EXPORTS

的文档中所述

所以我做了以下事情:

target_compile_options(test_plugin PRIVATE -Wl,-bundle_loader,$<TARGET_FILE:rcrl_compiler_tests>)

但是当我尝试编译插件时,我得到以下信息:

clang: warning: -Wl,-bundle_loader,/Users/mario/rcrl/build/bin/rcrl_compiler_tests: 'linker' input unused [-Wunused-command-line-argument]

从生成器表达式到可执行文件的路径是正确的 - 但标志本身没有被使用。

对于我需要从可执行文件中导出并在插件中使用的仅有的 2 个符号,我仍然遇到 linker 错误。

知道如何解决这个问题吗?

如果您使用 -undefined dynamic_lookup,则不需要 -bundle_loader

只需将其用于 link 标志:

set_target_properties(TARGET PROPERTIES LINK_FLAGS "-undefined dynamic_lookup \
    -Wl,-no_pie \
    -Wl,-search_paths_first"
)

...其中 TARGET 是您的 dylib