解决引用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