1

我试图将我的 C 程序libssl.so链接到 ,但链接器无法在该库中找到头文件中确实存在的函数。

Makefile 目标代码:

$(CC) -o $@ $^ $(CFLAGS) -lssl -lmagic

输出:

...
/usr/bin/ld: obj/signature.o: undefined reference to symbol 'SHA256_Init@@OPENSSL_1_1_0'
//usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
...

该函数存在SHA256_Init()并且它存在于openssl/sha.h它包含在源文件中。

我在 Debian 9 上。我安装了以下软件包:libssl1.0.0, libssl1.0.2, libssl1.1, libssl-dev(1.1.0)。

$ la /usr/lib/x86_64-linux-gnu/libssl*
-rw-r--r-- root root 357024 /usr/lib/x86_64-linux-gnu/libssl3.so
-rw-r--r-- root root 738444 /usr/lib/x86_64-linux-gnu/libssl.a
lrwxrwxrwx root root     13 /usr/lib/x86_64-linux-gnu/libssl.so -> libssl.so.1.1
-rw-r--r-- root root 395176 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0
-rw-r--r-- root root 431232 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2
-rw-r--r-- root root 442920 /usr/lib/x86_64-linux-gnu/libssl.so.1.1

我做错了什么以及如何解决问题?

4

1 回答 1

3

OpenSSL 分为 2 个库,libssl 和 libcrypto,这些函数位于 libcrypto 中,因此您无需链接到 libssl。利用

 -lcrypto

您还应该阅读此文档以获取更多信息,例如如何正确初始化 libcrypto

于 2017-08-25T21:25:43.107 回答