Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 对“SHA1'”的未定义引用;排队_C_Linux_Gcc - Fatal编程技术网

C 对“SHA1'”的未定义引用;排队

C 对“SHA1'”的未定义引用;排队,c,linux,gcc,C,Linux,Gcc,我尝试在linux上编译一个库。此库使用库。我已将此库包含在源文件中。之后,我使用flag-lssl和flag-lcrypto来编译这个项目。这是我的命令: gcc-g-Wall-lssl-lcrypto-o bt_客户端文件\u a.c文件\u b.c 但我遇到了错误: undefined reference to `SHA1' at line 130 第130行的代码是: SHA1((unsigned char *) null_padded_name, 20, (unsigned char

我尝试在linux上编译一个库。此库使用
库。我已将此库包含在源文件中。之后,我使用flag
-lssl
和flag
-lcrypto
来编译这个项目。这是我的命令:

gcc-g-Wall-lssl-lcrypto-o bt_客户端文件\u a.c文件\u b.c

但我遇到了错误:

undefined reference to `SHA1' at line 130
第130行的代码是:

SHA1((unsigned char *) null_padded_name, 20, (unsigned char *)name_sha1);
我错过什么了吗?请纠正我。谢谢:)

试试这个:

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

如果在链接应用程序时确定符号
SHA1
存在于
libssl.so
libcrypto.so

中,则链接器会按照您在命令行上给出的顺序查找依赖项

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


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

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

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

它有一个有趣的功能,允许您通过将包装器代码放在使用代码和实际库代码之间来覆盖/包装调用。我总是把我的库放在第一位,把.C和.o文件放在最后。(没有充分的理由,复制一个旧的makefile来创建下一个。)我正在Linux上使用g++。下面的答案帮助了我。我说的是“lssl”。我需要添加“-lcrypto”。