2014-04-10 52 views
5

我尝试在Linux上编译一个库。这个库文件使用<openssl/sha.h>库。我已经将这个库包含在源文件中。之后,我使用标志-lssl和标志-lcrypto来编译这个项目。因此,这里是我的命令:未定义对'SHA1'的引用,在行

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

但我遇到错误:在线路130

undefined reference to `SHA1' at line 130 

代码是:

SHA1((unsigned char *) null_padded_name, 20, (unsigned char *)name_sha1); 

难道我错过了什么?请纠正我。谢谢:)

回答

3

当您链接您的应用程序时,链接程序会按照您在命令行中给出的顺序查找依赖关系。

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

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

+2

这有让您覆盖通过将使用代码之间的封装代码/包调用的有趣的功能和实际的库代码。 –

+0

谢谢:)我明白了:D –

+1

不正确。我总是把我的图书馆放在第一位,我的.C和.o文件放在最后。 (没有很好的理由,复制一个旧的makefile来创建下一个。)我在Linux上使用g ++。下面的答案帮助了我。我在说“-lssl”。我需要添加“-lcrypto”。 –

6

试试这个:

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

如果您确信符号SHA1libssl.solibcrypto.so存在。

4

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

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