在openssl / sha.h中声明但在共享库

时间:2017-08-25 20:56:49

标签: c shared-libraries ld libssl

我尝试将我的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.0libssl1.0.2libssl1.1libssl-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

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

1 个答案:

答案 0 :(得分:3)

OpenSSL分为2个库libssl和libcrypto,这些函数存在于libcrypto中,因此您不需要链接到libssl。使用

function leftRoundedRect(x, y, width, height, radius) {
  return "M" + (x + radius) + "," + y
       + "h" + (width - radius)
       + "v" + height
       + "h" + (radius - width)
       + "a" + radius + "," + radius + " 0 0 1 " + (-radius) + "," + (-radius)
       + "v" + (2 * radius - height)
       + "a" + radius + "," + radius + " 0 0 1 " + radius + "," + (-radius)
       + "z";
}

您还应该阅读此documentation了解更多信息,例如:如何正确初始化libcrypto