在 openssl/sha.h 中声明但在共享库中找不到的函数
Function declared in openssl/sha.h but not found in shared library
我已经尝试 link 我的 C 程序针对 libssl.so
,但是 linker 未能在该库中找到头文件中确实存在的函数。
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
我做错了什么以及如何解决这个问题?
OpenSSL 分为 2 个库,libssl 和 libcrypto,这些函数存在于 libcrypto 中,因此您不需要 link 到 libssl。使用
-lcrypto
您还应该阅读此 documentation 了解更多信息,例如如何正确初始化 libcrypto
我已经尝试 link 我的 C 程序针对 libssl.so
,但是 linker 未能在该库中找到头文件中确实存在的函数。
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
我做错了什么以及如何解决这个问题?
OpenSSL 分为 2 个库,libssl 和 libcrypto,这些函数存在于 libcrypto 中,因此您不需要 link 到 libssl。使用
-lcrypto
您还应该阅读此 documentation 了解更多信息,例如如何正确初始化 libcrypto