在行的未定义引用`SHA1'

Trầ*_* Dự 7 c linux gcc

我尝试在linux上编译一个库.这个库使用<openssl/sha.h>库.我已将此库包含在源文件中.之后,我使用flag -lssl和flag -lcrypto来编译这个项目.所以这是我的命令:

gcc -g -Wall -lssl -lcrypto -o bt_client file_a.c file_b.c

但我遇到了错误:

undefined reference to `SHA1' at line 130
Run Code Online (Sandbox Code Playgroud)

第130行的代码是:

SHA1((unsigned char *) null_padded_name, 20, (unsigned char *)name_sha1);
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?请指正.谢谢 :)

Lee*_*hem 8

试试这个:

gcc -g -Wall -o bt_client file_a.c file_b.c -lssl -lcrypto
Run Code Online (Sandbox Code Playgroud)

如果您确定符号SHA1存在于libssl.so或中libcrypto.so.


Som*_*ude 6

当您链接应用程序时,链接器会按照您在命令行中提供的顺序查找依赖项。

因此,如果-lssl在依赖于该库的源/目标文件之前添加一个库(如),链接器将找不到任何依赖项并忽略该库。

这意味着您必须始终将库放在命令行的最后。

  • 这有一个有趣的功能,允许您通过将包装器代码放置在使用代码和实际库代码之间来覆盖/包装调用。 (2认同)

Rah*_*obi 5

您需要在命令行末尾提供-lssl和-lcrypto:

gcc -g -Wall -o bt_client file_a.c file_b.c -lssl -lcrypto 
Run Code Online (Sandbox Code Playgroud)