OpenSSL 编译错误未定义参考

Posted

技术标签:

【中文标题】OpenSSL 编译错误未定义参考【英文标题】:OpenSSL compile error undefined reference 【发布时间】:2020-12-14 15:23:14 【问题描述】:

当我尝试编译 openssl 时出现以下错误。我正在使用 bazel 并且正在使用 gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0。我正在使用 Openssl 1.1.1i。

util/netevent.c:1062: error: undefined reference to 'SSL_get1_peer_certificate'
util/netevent.c:1088: error: undefined reference to 'SSL_get1_peer_certificate'
collect2: error: ld returned 1 exit status

这是我为包装 openssl 编写的 BUILD 文件。以前也是这样,所以我不确定为什么会发生变化。

package(default_visibility = ["//visibility:public"])

cc_library(
 name = "libssl",
 srcs = glob(["**/libssl.a"]),
 hdrs = glob(["**/ssl/**/*.h"])
)

cc_library(
 name = "libcrypto",
 srcs = glob(["**/libcrypto.a"]),
 hdrs = glob(["**/crypto/**/*.h"])
)

OpenSSL 配置为

Operating system: x86_64-whatever-linux2
Configuring OpenSSL version 1.1.1i (0x1010108fL) for linux-x86_64

我正在链接 -lssl 和 -lcrypto。

我认为问题出在我正在使用的库上,因为它会构建并以某种方式获得 SSL_get1_peer_certificate 而不是 SSL_get_peer_certificate

我 greped 并且它构建的实际文件使用了正确的函数,但二进制文件有错误的函数...

【问题讨论】:

【参考方案1】:

libssl.a 听起来像一个静态库。

要编译 OpenSSL 库,我希望有一个如下所示的规则

cc_library(
  name = "libssl",
  srcs = glob(["src/ssl/*.cc"]),
  hdrs = glob(["src/ssl/*.h"]),
  deps = [
    # TODO
  ]
)

【讨论】:

【参考方案2】:

好的,这只是一个奇怪的答案,但我会提供它。一个名为 unbound 的依赖项被静态链接,需要动态链接。

【讨论】:

以上是关于OpenSSL 编译错误未定义参考的主要内容,如果未能解决你的问题,请参考以下文章

链接器错误,使用 g++ 链接到由 gcc 编译的库,未定义对该函数的引用

Boost 1_65_1 不能用 OpenSSL 1.1.0g “未定义的参考”编译,但用“nm”找到

未定义参考编译MITK/Qt

“库 openssl 未设置 python 依赖它,请启用”,同时编译访问可视化工具

keil编译没有显示未定义,但是iar显示

解决OpenSSL加入到在Visual Studio 2019中编译返回LNK2019错误