您的位置:首页 > Web前端

解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to错误的问题

2016-05-30 15:14 447 查看
解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to错误的问题

最近在做使用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):指定头文件的文件夹地址

from:   http://www.cnblogs.com/Boyona/p/4999339.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: