2014-04-10 50 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