使用 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
我有一个将由可执行文件加载的插件。
可执行文件导出符号,这里是可执行文件的一些 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