最近在做使用openssl链接http和https的项目,编译时出现以下问题。
/usr/local/openssl/lib/libcrypto.a(async.o): In function `async_free_pool_internal':async.c:(.text+0xe4): undefined reference to `pthread_setspecific'async.c:(.text+0xf4): undefined reference to `pthread_getspecific'async.c:(.text+0x104): undefined reference to `pthread_setspecific'/usr/local/openssl/lib/libcrypto.a(async.o): In function `ASYNC_init_thread.part.1':async.c:(.text+0x253): undefined reference to `pthread_setspecific'/usr/local/openssl/lib/libcrypto.a(async.o): In function `async_start_func':async.c:(.text+0x36f): undefined reference to `pthread_getspecific'async.c:(.text+0x39e): undefined reference to `pthread_getspecific'/usr/local/openssl/lib/libcrypto.a(async.o): In function `ASYNC_start_job':async.c:(.text+0x404): undefined reference to `pthread_getspecific'async.c:(.text+0x41e): undefined reference to `pthread_getspecific'async.c:(.text+0x433): undefined reference to `pthread_getspecific'/usr/local/openssl/lib/libcrypto.a(async.o):async.c:(.text+0x44c): more undefined references to `pthread_getspecific' follow/usr/local/openssl/lib/libcrypto.a(async.o): In function `ASYNC_start_job':async.c:(.text+0x7ef): undefined reference to `pthread_setspecific'async.c:(.text+0x811): undefined reference to `pthread_getspecific'async.c:(.text+0x82d): undefined reference to `pthread_getspecific'async.c:(.text+0x83f): undefined reference to `pthread_getspecific'async.c:(.text+0x870): undefined reference to `pthread_getspecific'async.c:(.text+0x891): undefined reference to `pthread_getspecific'/usr/local/openssl/lib/libcrypto.a(async.o):async.c:(.text+0x8a6): more undefined references to `pthread_getspecific' follow/usr/local/openssl/lib/libcrypto.a(async_posix.o): In function `async_global_init':async_posix.c:(.text+0xc): undefined reference to `pthread_key_create'async_posix.c:(.text+0x1e): undefined reference to `pthread_key_create'/usr/local/openssl/lib/libcrypto.a(async_posix.o): In function `async_local_init':async_posix.c:(.text+0x3d): undefined reference to `pthread_setspecific'async_posix.c:(.text+0x50): undefined reference to `pthread_setspecific'/usr/local/openssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':dso_dlfcn.c:(.text+0x21): undefined reference to `dlopen'dso_dlfcn.c:(.text+0x34): undefined reference to `dlsym'dso_dlfcn.c:(.text+0x3f): undefined reference to `dlclose'/usr/local/openssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func':dso_dlfcn.c:(.text+0x354): undefined reference to `dlsym'dso_dlfcn.c:(.text+0x3fb): undefined reference to `dlerror'/usr/local/openssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_var':dso_dlfcn.c:(.text+0x474): undefined reference to `dlsym'dso_dlfcn.c:(.text+0x52e): undefined reference to `dlerror'/usr/local/openssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load':dso_dlfcn.c:(.text+0x5a4): undefined reference to `dlopen'dso_dlfcn.c:(.text+0x60b): undefined reference to `dlclose'dso_dlfcn.c:(.text+0x638): undefined reference to `dlerror'/usr/local/openssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr':dso_dlfcn.c:(.text+0x6ce): undefined reference to `dladdr'dso_dlfcn.c:(.text+0x731): undefined reference to `dlerror'/usr/local/openssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_unload':dso_dlfcn.c:(.text+0x78a): undefined reference to `dlclose'
解决方案:
=======================================================================================================
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):指定头文件的文件夹地址
posted on 2015-11-26 23:07 Rhina 阅读( ...) 评论( ...) 编辑 收藏转载于:https://www.cnblogs.com/Boyona/p/4999339.html
相关资源:openssl库(版本号OpenSSL_1_1_1c)编译文件