【问题标题】:Mac OS X 10.6 : OpenSSL libraryMac OS X 10.6:OpenSSL 库
【发布时间】:2012-10-23 20:30:21
【问题描述】:

我在 Mac 上收到了一个旧代码并尝试在 OS X 10.6 上编译它,在代码中很少调用 OpenSSL 库(例如 SSL_write())我在这些文件中添加了标头(#include)并检查我的 OpenSSL 版本向我显示“0.9.8r”(我知道 Apple 有它自己的这个库 crypto' 框架)但是为什么我得到这样的链接错误:

  sockets::TcpSocket::TryWrite(char const*, unsigned long) in TcpSocket.o

我知道代码应该针对 /usr/lib 中的这个库编译,但它没有,我是否缺少 Xcode 中的路径或其他设置?

【问题讨论】:

  • sockets::TcpSocket::TryWrite 不是 OpenSSL。

标签: macos unix openssl


【解决方案1】:

/usr/bin 中没有库。我假设你的意思是/usr/lib。但是,您通常不会针对 /usr/lib 进行编译。您通常针对特定的 SDK 进行编译,该 SDK 有自己的 /usr/lib 和 /usr/include 副本。你使用的SDK头文件一般在-isysroot参数中传递。如果您在 Xcode 中构建,这些设置主要通过“Base SDK”和“OS X 部署目标”设置。不过,如果没有更多关于你如何构建的细节,我不确定还能指点你哪里。特别是,相关文件的编译和链接行是什么样的?


在 Xcode 中,不要尝试通过路径链接特定的系统库。您应该始终使用构建设置的“链接阶段”面板链接到系统库,并从 SDK 库列表中进行选择。在“链接阶段”面板中选择特定路径几乎总是会导致问题。

【讨论】:

  • 感谢您的回复。对不起,我的意思是 usr/lib。关于那个丢失的库,我猜它是 openssl,我将它与 SDKs/MacOSX10.6/usr/lib/libssl.0.9.8.dylib 链接起来,它会给我一组其他链接错误,例如:“vtable for sockets::Exception",引用自:sockets::Exception::~Exception() in EventHandler.o "sockets::SSLInitializer::SSLInitializer()",引用自:__static_initialization_and_destruction_0(int, int) in TcpSocket.o "_ERR_error_string ",引用自:TcpSocket.o中的sockets::TcpSocket::TryWrite(char const*, unsigned long)
猜你喜欢
  • 1970-01-01
  • 2012-01-31
  • 2011-09-09
  • 1970-01-01
  • 2011-07-29
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多