Mac App Store应用程序中的libcrypto / OpenSSL出现问题

时间:2011-08-13 18:22:39

标签: objective-c cocoa openssl static-libraries

我正在准备我的Mac App Store应用程序,作为其中的一部分,我已经放弃了Nick Paulson的NPReceiptVerification并且一直在努力让事情变得有效。这是一个非常简单的设置,但从我收集到的内容,您应该将libcrypto作为静态库编译到您的应用程序中,以避免通过更改动态库来妥协。

这意味着我需要提供自己的libcrypto.a(如果我理解正确的话)。我自己编译并将其添加到我的Xcode项目中。现在的问题是,出于某种原因,在编译我的项目Xcode时,直接忽略了项目中的libcrypto,而是跳转到系统中其他缺少64位二进制文​​件的dylib版本,从而导致编译失败。

如何让Xcode使用库的编译版本?我知道这可能看起来很简单,但作为一个业余爱好者Cocoa程序员,他只与Apple的图书馆合作过,这一切看起来都很陌生。

谢谢!

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我在将.a文件重命名为'libmycrypto.a'之后解决了这个问题,然后再将其添加到项目中,这是我从Linking to libcrypto for Leopard?获得的解决方案。我猜它也可以改变库搜索路径顺序,但我不相信我有一天不会把它搞砸了。

如果查看Xcode输出窗口中的link命令,可以看到“-lcrypto”,当您重命名并重新添加库时,它会更改为“-lmycrypto”。这可以防止它连接libcrypto.dylib,无论它搜索库的顺序如何。

答案 1 :(得分:1)

我假设你在使用Xcode 4,但Xcode 3应该类似。

在侧栏中选择您的项目,然后选择您的应用程序目标。转到Build Phases部分。在“Link Binary with Libraries”下,你必须确保你的.a文件在那里 - 而不是dylib。 (还要记住,没有必要将.a文件放入“复制文件”构建阶段 - 因为您会发现自己在使用Cocoa框架 - 因为静态库会被编译到您的应用程序中。)

答案 2 :(得分:0)

  

现在的问题是,出于某种原因,在编译我的项目Xcode时,直接忽略了项目中的libcrypto,而是跳转到系统中其他缺少64位二进制文​​件的dylib版本,从而导致编译失败

假设您的路径正确(具体而言,您通过-L提供的内容)....这是Apple和Xcode的已知问题。即使iOS无法加载非系统dylib,Xcode也会对iOS做同样的事情!就像Apple工程师没有得到备忘录......

user2297467给了你答案。您必须重命名或将dylib移出库目录。

在Apple的Xcode中工作的其他内容:省略-L,省略-l并指定存档的完整路径(例如/usr/local/ssl/libcrypto.a) 。除了Apple之外,这在我所知的任何地方都有用。