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

转载 2016年05月30日 15:14:47

最近在做使用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

解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to异常的有关问题

解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to错误的问题 最近在做使用openssl链接http和https的项目,编译时出...
  • azhangyi188
  • azhangyi188
  • 2016年04月05日 12:52
  • 1335

环信libHyphenateSDK.a和支付宝libcrypto.a冲突问题解决办法

项目中需要继承支付宝和环信,编译的时候没有错误,但是在运行的时候报了duplicate symbol错误,从错误提示中发现新版的环信sdk中的静态库libHyphenateSDK.a与支付宝中的静态库...
  • Winzlee
  • Winzlee
  • 2016年05月18日 13:44
  • 3290

openssl 静态库 libcrypto.a libssl.a

  • 2017年06月23日 12:59
  • 1.62MB
  • 下载

CentOS6升级openssl报错libcrypto.a(rsaz_exp.o): could not read symbols: Bad value

详细报错日志如下: make[3]: Entering directory `/root/openssl-1.0.2g' make[4]: Entering directory `/root/op...
  • wo1769815
  • wo1769815
  • 2017年06月26日 12:45
  • 706

Openssl 库的静态链接

链接Openssl库的时候,遇到一个问题:明明在Makefile里指明了link指定的.a文件(openssl-1.0.1c/lib/libssl.a 和 openssl-1.0.1c/lib/lib...
  • yasi_xi
  • yasi_xi
  • 2013年01月24日 14:04
  • 8746

在你的 iOS App中 使用 OpenSSL 库

 在你的 iOS App中 使用 OpenSSL 库——译自x2on的“Tutorial: iPhone Appwith compiled OpenSSL 1.0.0a Library”原文地址:ht...
  • kmyhy
  • kmyhy
  • 2011年06月09日 14:47
  • 55517

Erlang安装时加载openssl的libcrypto.a失败,执行crypto:start()报错的解决方案

刚开始碰到这个问题的时候,从网上找的例子。搞了半天不好使,后来发现了原因,主因是自己对linux认知不够,只有发布服务、查看日志的基本功。 先上原文连接:http://blog.csdn.net/z...
  • shmilylzy0815
  • shmilylzy0815
  • 2016年07月15日 10:27
  • 740

ios平台的支持arm64和x86_64的通用openssl静态库(libcrypto.a和libssl.a)

  • 2015年04月08日 16:37
  • 6.4MB
  • 下载

linux 安装库 编译提示-lcrypto 无法链接,缺少 crypto 库

linux 安装库 缺少 crypto 库 编译提示-lcrypto 无法链接,缺少 crypto 库 方法一 -----------------------------------...
  • azhangyi188
  • azhangyi188
  • 2016年03月31日 11:24
  • 4715

Openssl中的Libcrypto API

简单例子 #include #include #include int main(int arc, char *argv[]) { /* Load the human readable e...
  • u010144805
  • u010144805
  • 2017年12月06日 14:30
  • 103
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to错误的问题
举报原因:
原因补充:

(最多只允许输入30个字)