解决引用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的项目,编译时出...

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

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

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

在Windows下用MinGW编译OpenSSL,及OpenSSL静态链接库libcrypto.a使用问题

最经我用MinGW编译OpenSSL的过程中发生了很多问题,不过好在已经解决了,现在写出来以备查询 以OpenSSL-0.9.8l为例:前略(下载,解压)注意要安装Perl,如果你只是用来安装Open...
  • pgplay
  • pgplay
  • 2009年12月26日 16:24
  • 5814

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

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

两个多月前写过一篇关于这个问题的文章,由于写得比较简略,很多同学还是很纠结这个问题,所以在此补充一下具体的操作过程。很多同学根据我上一篇文章重装后仍然失败的原因,常见的有如下几个: 1、加-fPIC参...

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
  • 8528

在你的 iOS App中 使用 OpenSSL 库

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

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

linux 安装库 缺少 crypto 库 编译提示-lcrypto 无法链接,缺少 crypto 库 方法一 -----------------------------------...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to错误的问题
举报原因:
原因补充:

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