C 对“SHA1'”的未定义引用;排队
我尝试在linux上编译一个库。此库使用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
库。我已将此库包含在源文件中。之后,我使用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”。