对SSL_library_init和SSL_load_error_strings的未定义引用

sam*_*rat 13 c openssl undefined-reference

我正在实现一个OpenSSL代码并且已经包含了必需的头文件,但我仍然遇到像*这样的错误

未定义的引用 SSL_library_init

我想这是一个链接错误而不是编译错误.

我正在使用slickeditor在Linux机箱中实现它.

jww*_*jww 14

链接libssllibcrypto.你的LDFLAGS,LDLIBS将如下.订单事宜LDLIBS:

LDFLAGS = -L/usr/local/ssl/lib
LDLIBS = -lssl -lcrypto
Run Code Online (Sandbox Code Playgroud)

不要担心在库名称前面添加"lib",或者在"so"或"a"后缀中添加"lib".链接器会为您完成.

如果要从命令行构建,则可以使用以下命令.再次,订单很重要.

gcc foo.c -o foo.exe -L/usr/local/ssl/lib -lssl -lcrypto
Run Code Online (Sandbox Code Playgroud)

如果您使用的是系统的OpenSSL,那么您可以省略-L/usr/local/ssl/lib.

  • @CraigScott - 抱歉回复晚了。顺序很重要,因为它是单通道链接器。当LD遇到不满足的链接符号时,它会记录它们并在随后的库中查找它们。如果 `libcrypto` 是第一个,那么 `libssl` 就会有像 `BN_new` 这样不满足的符号,因为 `libcrypto` 需要跟在 `libssl` 后面才能满足缺失的符号。另一个选项是两遍链接器。有时您还会看到类似“-la -lb -la”的内容(“liba”后跟“libb”,后跟“liba”)。这通常是由于隐藏在幕后的循环引用造成的。 (3认同)

rog*_*ack 11

对我来说这意味着安装

 apt install libssl1.0-dev
Run Code Online (Sandbox Code Playgroud)

  • 你是一个救星。尝试在 Ubuntu 18 上编译 AOSP,并且不得不降级 openssl 1.1 -> 1.0.1 ,但已经安装了 libssl-dev (3认同)

小智 8

这些方法在 OpenSSL 1.1 中已弃用。你不需要更多地使用它。您只需将其删除即可。更多信息请参见 OpenSSL 手册。