Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何将可执行文件链接到动态库以使程序可重新撤销-最好使用cmake_Macos_Cmake_Dynamic Linking_Dyld - Fatal编程技术网

Macos 如何将可执行文件链接到动态库以使程序可重新撤销-最好使用cmake

Macos 如何将可执行文件链接到动态库以使程序可重新撤销-最好使用cmake,macos,cmake,dynamic-linking,dyld,Macos,Cmake,Dynamic Linking,Dyld,我有一个简单的应用程序,它创建动态库和可执行文件,并将其中的两个链接在一起 cmake_minimum_required (VERSION 3.4) project (SampleApplication) add_library(SampleSharedLibrary SHARED some.cpp) add_executable(SampleApplication main.cpp) target_link_libraries(SampleApplication SampleSharedLib

我有一个简单的应用程序,它创建动态库和可执行文件,并将其中的两个链接在一起

cmake_minimum_required (VERSION 3.4)
project (SampleApplication)
add_library(SampleSharedLibrary SHARED some.cpp)
add_executable(SampleApplication main.cpp)
target_link_libraries(SampleApplication SampleSharedLibrary)
问题是当我将文件复制到其他目录时

cp bin/* other_directory/
它会错误地停止工作

dyld:未加载库:@rpath/libSampleSharedLibrary.dylib
引用自:/some\u path/other\u目录//SampleApplication
原因:找不到图像 中止陷阱:6

其他资料:

cmake版本3.7.2

otool-D libSampleSharedLibrary.dylib

libSampleSharedLibrary.dylib:

@rpath/libSampleSharedLibrary.dylib

我在谷歌上搜索了一下,但在cmake中找不到实现这一点的方法——要么我使用了错误的属性,要么我没有正确的语法。我发现一些帖子建议使用instal_name_工具,但我更愿意坚持只使用cmake,因为我认为这应该在cmake中是可行的。我发现解决方案应该是在dylib中使用“@executable\u path”(或@loader\u path)作为install\u名称,或者在dylib中使用rpath并使用“@executable\u path”将rpath添加到可执行文件中

所以我的问题是如何在cmake中创建可重定位的动态库和可执行对。一个工作的cmake代码示例将是完美的。如果你在这方面很流利,你可以找到一些方法,如果你能列出一些解释,我将不胜感激