在XCode中静态链接OpenSSL
我试图在XCode命令行项目[链接二进制与库]下链接libssl.a和libcrypto.a静态库.我在搜索路径中包含了Openssl头文件.
编译成功但执行失败,dyld:未加载库:/usr/local/ssl/lib/libcrypto.1.0.0.dylib. 当我静态链接它时,为什么它会寻找dylib?怎么解决这个问题? 任何帮助都会很明显. 解决方法
Apple的链接器使用dylib或share对象(如果可用),无论您的链接器标志如-rpath和-Bstatic如何.他们甚至在iOS上进行,不允许使用dylib! 一旦你知道它就是一个众所周知的问题:)例如,参见Installing Crypto++ 5.6.2 on Mac OS X.Crypto与Apple的工具有同样的问题. 解决方法是停止使用-L和-l选项,并直接链接目标文件或存档.存档只是目标文件的集合,因此您可以互换使用它们. 要指定链接器的目标文件或存档,请参阅Linking to an object file.在Xcode下,将完全指定的存档名称(如/usr/local/openssl-ios/lib/libcrypto.a)添加到Other Linker Flags( 将完整存档添加到OTHER_LDFLAGS时,我相信您只需逐字添加即可,无需任何开关,例如-l或-L.您可能需要-Wl(-Wl,/usr/local/openssl-ios / lib / libcrypto.a),但不要使用-l(-l /usr/local/openssl-ios / lib / libcrypto.a ). 当选项通过编译器驱动程序传递给链接器时,可以使用-Wl.如果直接调用链接器,那么您不需要-Wl,也不应该使用它. 第二个选项是将GCC_LINK_WITH_DYNAMIC_LIBRARIES设置为YES. Apple似乎没有在Xcode Build Setting Reference中记录它,但它显然在我的Xcode副本下.有关Stack Overflow的信息,请参阅How to link a static library for iOS. 我好像记得在过去有这个问题.它应该在理论上起作用,但在实践中不起作用. 第三个选项是从Xcode下使用的所有路径中删除dylib或共享对象,这样Xcode在使用-lcrypto时不会意外地找到它. 第四个选项是使用允许动态链接,但是使用 但我不喜欢这个选项,因为它要求你的软件用户做一些事情. 另一种可能是由于消息dyld:未加载库:/usr/local/ssl/lib/libcrypto.1.0.0.dylib是对您的库副本进行代码签名.它的发现有点奇怪但没有加载,所以我打算把它扔到那里以防OS X的Code Signing或Gatekeeper Service …… 要在MAC Developer程序下对您的库副本进行代码签名,只需: codesign -fs "Johnny Developer" /usr/local/ssl/lib/libcrypto.so (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- C#Rest API返回动态对象
- xml解析三种方式知识积累
- jboss7搭载EJB3之简单会话BEAN与依赖注入jboss数据源
- ruby-on-rails – 首先捆绑安装,堆栈级别太深
- c# – string.Equals(“string”)和“String”.Equals(stri
- DDD实战进阶第一波(四):开发一般业务的大健康行业直销系统
- Flex preloader 引用swf文件
- Windows下Ruby+Watir自动化测试的环境搭建及数据读取
- react-native – 你如何要求()React Native中的声音文件?
- 反正讨厌配置各种xml,于是我自己添加了mybatis的sql生成