注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

请移步gmd20.github.com

// 编程和生活。不再使用,网易博客功能异常他们都没人维护了

 
 
 

日志

 
 

2017-12-12-编译curl时选择链接指定目录下自己编译的新版openssl库.markdown  

2017-12-12 01:06:31|  分类: linux相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
自己从源码编译一个新的openssl
=============================
下载源码下来解压到 /home/ming/openssl-1.0.2m

```text
./config -h
/usr/bin/perl ./Configure  -h

./config shared --prefix=/usr/mylibs --openssldir=/usr/mylibs/ssl
make clean
make
make install

make install 之后它会把头文件和动态库静态库都复制到/usr/mylibs目录下,
系统旧版的0.98版本的openssl和头文件那些都在系统目录。怕系统其他依赖,
不想破坏系统文件
```




编译curl,链接新的openssl
=========================
这一个很麻烦,curl的congfure脚本老是使用系统旧版的openssl,

```text
export PKG_CONFIG_PATH=/usr/mylibs/lib/pkgconfig
pkg-config --cflags --libs libssl

./configure --prefix=/usr/mylibs --with-ssl=/home/ming/openssl-1.0.2m \
  --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict \
  --enable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp \
  --disable-gopher --disable-manual --disable-ipv6 --disable-verbose \
  --disable-sspi --disable-crypto-auth --disable-ntlm-wb \
LDFLAGS="-Wl,-rpath-link=/usr/mylibs/lib -Wl,--verbose"

用--with-ssl=/usr/mylibs来配置是不行,可能由于系统已经存在0.98e的openssl,老是
认出旧版本的openssl,连头文件包含目录都没有配置,配置了PKG_CONFIG_PATH也不行。
使用--with-ssl=/home/ming/openssl-1.0.2m 的话,可以看到Makefile里面是把
--with-ssl=/home/ming/openssl-1.0.2m做为openssl的目录了,头文件正确了,
但LDFLAGS = -L/home/ming/openssl-1.0.2m/lib的链接库还是不对的,需要源码目录
/home/ming/curl-7.57.0/lib/Makefile 里面的LDFLAGS改为 LDFLAGS = -L/usr/mylibs/lib
然后再看他ld搜索的路径优先使用 -L/usr/mylibs/lib 目录下面的 libssl.so 了。


因为自己编译的openssl(libssl.so)安装在/usr/mylibs/lib 目录下面,不用-rpath/-rpath-link指定
的话,ld还是优先会使用系统自带的旧版/usr/lib/libssl.so。
--rpath-link来指定具体要链接的动态库的目录,但看上去不起作用,这个只有在编译exe的
的时候才起作用?编译so不起作用?还是ld版本太旧的原因?
尝试LD_PRELOAD, LD_LIBRARY_PATH  和 /etc/ld.so.conf 这些也是没有什么用的。

不过好在-L指定的目录顺序是排在/lib /usr/lib系统目录的前面,这样才链接到了正确版本的libssl.so
通过这个 -Wl,--verbose 参数才看出问题了。
```

总结:系统存在多版本时的链接问题
========================
如果系统在两个地方有两个不同版本的库,要选择链接使用某一个时,还是用 ld连接器的  -L参数来制定库的目录。   
最好还是直接修改Makefile。 其他configure脚本 pkg-config 环境变量等不是都不可靠,还是直接修改Makefile   
才行。  
当然能保证兼容性问题,之安装一个版本,尽量用系统提供的安装包和头文件那是最好的了。

  评论这张
 
阅读(54)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018