解決引用openssl靜態庫libcrypto.a和libssl.a出現undefined reference to錯誤的問題


 

最近在做使用openssl鏈接橢圓曲線加密的項目,編譯時出現以下問題。

./src/USIM.o: In function `handleErrors':
/usr/sunq/UE/Debug/../src/USIM.c:36: undefined reference to `ERR_print_errors_fp'
./src/USIM.o: In function `getSharedSecret':
/usr/sunq/UE/Debug/../src/USIM.c:154: undefined reference to `EVP_PKEY_CTX_new_id'
/usr/sunq/UE/Debug/../src/USIM.c:157: undefined reference to `EVP_PKEY_paramgen_init'
/usr/sunq/UE/Debug/../src/USIM.c:160: undefined reference to `EVP_PKEY_CTX_ctrl'
/usr/sunq/UE/Debug/../src/USIM.c:163: undefined reference to `EVP_PKEY_paramgen'
/usr/sunq/UE/Debug/../src/USIM.c:166: undefined reference to `EVP_PKEY_CTX_new'
/usr/sunq/UE/Debug/../src/USIM.c:170: undefined reference to `EVP_PKEY_keygen_init'
/usr/sunq/UE/Debug/../src/USIM.c:171: undefined reference to `EVP_PKEY_keygen'
/usr/sunq/UE/Debug/../src/USIM.c:177: undefined reference to `EC_GROUP_new_by_curve_name'

 

解決方案:

=======================================================================================================

gcc obj/Debug/main.o -L/usr/local/openssl/lib -lssl -lcrypto -ldl -lpthread -o main

原因分析:

在鏈接這個庫的時候一定要注意2個問題:

1.openssl庫的版本問題,請直接鏈到你需要的openssl庫路徑,比如我的就是/usr/local/openssl/lib,

2.注意-lssl -lcrypto要寫在-ldl -lpthread前面,這四個必須要。

相關知識:

-L :此選項是指定鏈接庫的文件夾地址

-l(小寫的L):-lssl 即是尋找/usr/local/openssl/lib目錄下的 libssl.a 這個庫,編譯器會自動尋找 libssl.a或者libssl.so

-I(大寫的i):指定頭文件的文件夾地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM