【问题标题】:Linker errors when compiling libgit2 static Library编译 libgit2 静态库时出现链接器错误
【发布时间】:2016-09-19 21:46:19
【问题描述】:

我已经通过以下步骤成功地为 OSX 构建了一个跨平台的静态库:

mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=OFF "-DCMAKE_OSX_ARCHITECTURES=x86_64;i386" ..
cmake --build .

我也大部分成功地将那个库链接到我自己的项目中,但现在在 XCode 5.1.1 中遇到了一系列关于缺少符号的链接器错误:

Undefined symbols for architecture x86_64:
"_SSLClose", referenced from:
  _stransport_close in libVAST.a(stransport_stream.c.o)
"_SSLCopyPeerTrust", referenced from:
  _stransport_connect in libVAST.a(stransport_stream.c.o)
  _stransport_certificate in libVAST.a(stransport_stream.c.o)
"_SSLCreateContext", referenced from:
  _git_stransport_stream_new in libVAST.a(stransport_stream.c.o)
"_SSLHandshake", referenced from:
  _stransport_connect in libVAST.a(stransport_stream.c.o)
"_SSLRead", referenced from:
  _stransport_read in libVAST.a(stransport_stream.c.o)
"_SSLSetConnection", referenced from:
  _git_stransport_stream_new in libVAST.a(stransport_stream.c.o)
"_SSLSetIOFuncs", referenced from:
  _git_stransport_stream_new in libVAST.a(stransport_stream.c.o)
"_SSLSetPeerDomainName", referenced from:
  _git_stransport_stream_new in libVAST.a(stransport_stream.c.o)
"_SSLSetProtocolVersionMax", referenced from:
  _git_stransport_stream_new in libVAST.a(stransport_stream.c.o)
"_SSLSetProtocolVersionMin", referenced from:
  _git_stransport_stream_new in libVAST.a(stransport_stream.c.o)
"_SSLSetSessionOption", referenced from:
  _git_stransport_stream_new in libVAST.a(stransport_stream.c.o)
"_SSLWrite", referenced from:
  _stransport_write in libVAST.a(stransport_stream.c.o)
"_SecCertificateCopyData", referenced from:
  _stransport_certificate in libVAST.a(stransport_stream.c.o)
"_SecCopyErrorMessageString", referenced from:
  _stransport_error in libVAST.a(stransport_stream.c.o)
"_SecTrustEvaluate", referenced from:
  _stransport_connect in libVAST.a(stransport_stream.c.o)
"  _SecTrustGetCertificateAtIndex", referenced from:
  _stransport_certificate in libVAST.a(stransport_stream.c.o)
...
...

一直如此。

我想在某个地方我缺少一个额外的步骤或依赖项,并且我得到了一些提示,鉴于这个 git-hub 线程在 rust 上,它并非完全没有先例,(https://github.com/rust-lang/cargo/issues/2295) 但我不是完全确定如何进行。想法?

【问题讨论】:

    标签: c++ libgit2


    【解决方案1】:

    最可能的原因是旧版本的 OSX 和 libgit2。某些版本的 libgit2 假定 OSX/macOS 上的安全框架始终提供 SecureTransport(提供您缺少的加密/TLS 符号的库)。

    旧操作系统并非如此。此问题已在 2015 年底修复,该修复程序包含在 v0.24 版本系列以及 v0.23.2 中。

    【讨论】:

      猜你喜欢
      • 2018-12-11
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多