我的项目需要OpenSSL库的crypto
和ssl
模块。在将Xcode更新到8.2.1版本后,编译我的项目失败了。
在我的项目构建设置中,在链接选项中,我添加了-lssl -lcrypto -lxml2
以指示加载这些库。回到我的应用程序构建设置中,我在库搜索路径中添加了/usr/local/opt/openssl/lib/
来告诉Xcode在哪里查找。
太棒了,它可以正常编译、构建和运行。很酷。
但是
在不同的Mac上启动应用程序时,应用程序崩溃,并显示以下链接错误:
Dyld Error Message:
Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
Referenced from: /Applications/MyApp.app/Contents/MacOS/MyApp
Reason: image not found
这意味着该应用程序正在尝试加载可能不存在于该Mac上的open ssl库。可能只有旧版本,或者该文件夹根本不存在?因此,这肯定不是解决方案。
我的问题在于,我不知道如何解决这个问题。
从链接中删除-lssl -lcrypto
并不能帮助解决问题,因为在链接过程中出现了错误。
我猜我需要一种方法来告诉Xcode仅在编译时查找那里。那是可能的吗?
libssl.dylib
和libcrypto.dylib
包含在你的应用程序包中。这似乎可以解决 Reason: image not found 的问题。同时,参考 Using Dylibs Inside App Bundle 和 Including dylib in application bundle。 - jwwdylib
添加到我的应用程序包中,但主要问题仍然存在。在编译时,我需要在库搜索路径/usr/local/opt/openssl/lib
中指定 openssl 的路径,以便编译成功。但是,在启动应用程序时,它会搜索在/usr/local/opt/openssl/lib
找到的dylib
,即/usr/local/opt/openssl/lib/libssl.1.0.0.dylib
(我猜它只是搜索编译时找到的dylib
)。如何告诉应用程序加载嵌入的dylib
而不是寻找/usr/local/opt/openssl/lib/
中的dylib
?这是否可能? - Link14/usr/lib
中找到了另一个libssl.dylib
和libcrypto.dylib
。但是当我将该路径添加到库搜索路径中时,编译命令会将其丢弃,它似乎没有被使用。 - Link14install_name_tool
来取消硬编码路径/usr/local/opt/openssl/lib
。也许你应该将它相对于应用程序进行设置。我认为你可以在预构建脚本或预构建阶段完成这个操作。 - jww