【Linux踩坑】使用boost.zlib库时出现的一些问题

编译操作流程

1.编译libz动态库so文件,在Linux上。

下载zlib-1.2.11压缩包,解压,执行编译命令

(1)使用root进行操作,防止无权限

(2)进入到解压后的zlib-1.2.11目录下

(3)执行./configure命令,如果报权限不够,则先执行chmod +x configure 把权限给它加上,再执行

(4)执行make命令

最后可以看到在当前目录有生成linbz.so文件和静态文件

1.使用libz.a静态库链接,库依赖项添加《z》,但会报各种zlib函数未定义的错误

网络上看了很久资料但还是没有想法,因为不太清楚iostreams和zlib之间的具体联系,貌似是交叉编译的问题,iostreams需要支持zlib ,这里就重新编译iostreams.a。

(5)使用命令编译./bootstrap.sh --with-libraries=iostreams 先保证iostreams支持zlib(YES)

问题一:error:libboost_iostreams.a(gzip.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC。

然后因为Linux下boost编译没有-fpic选项(关于重定向什么的,不进行以下操作编译会报错)且貌似64位机器上boost编译的iostreams不能用。

先使用./bjam --with-python --build-dir="mystage" link=static -n > comtxt 

然后打开comtxt 将文件里不是执行命令的东西删掉,把“g++ 修改为g++ –fPIC ,保存后,执行这个文件:bash comtxt 即可在对应目录下生成iostreams.a

参考:boost中静态库编译没有-fPIC选项的问题解决方案_John_ToDebug的博客-CSDN博客

-fpic是什么?linux下动静态库(初学者必备)_一个山里的少年的博客-CSDN博客_linux 静态库

还有些细节后续补充,有问题可以评论区

问题二: dlopen(“XX/base.so”, RTLD_NOW)时返回空,使用dlerror()函数查看详细的错误描述:liboost_iostreams.so.1.68.0:cannot open shared object file: No such file or directory.

使用ldd base.so 查看其链接依赖的库有没有缺失,发现liboost_iostreams.so.1_68_0 not found了,说明这个文件系统找不到。

可以试下修改环境变量 ,参考下这个​​​​​​缺少动态连接库.so--cannot open shared object file: No such file or directory_test的技术博客_51CTO博客

虽然ldd没有not found了,但感觉还是没用到liboost_iostreams.so.1.68.0。

然后我用locate liboost_iostreams: 看下系统下关于liboost_iostreams的文件有哪些,发现系统下有个1.53.0的文件并且在usr/lib64下(这个目录系统会首先查找),所以应该是版本不对导致系统以为1.68.0没有。。。于是把我编好的1.68.0放到usr/lib64下。base.so重新编译就可以了!!

上述的那个方法不推荐。

首先vs虽然设置了共享库、依赖库路径,但是看起来so并没有按照这个来找,

先找系统依赖库lib64,后又找环境变量,所以将依赖库对应的路径设置成环境变量..

此方法仅供临时测试使用,将动态库的路径设置给环境变量LD_LIBRARY_PATH,此方法当终端结束关闭就失效

查看LD_LIBRARY_PATH的值:echo $LD_LIBRARY_PATH
设置LD_LIBRARY_PATH的值:export LD_LIBRARY_PATH=动态库的相对路径/绝对路径
查看动态库依赖关系:ldd 执行文件
 

解决linux动态库链接失败的四种方法_爱出名的狗腿子的博客-CSDN博客_动态库链接静态库失败

知识点:

如何在window下编译boost库

5004. boost 源码编译vs2019_xhome516的博客-CSDN博客

如何在Linux下编译boost库

linux下boost库编译_OctopusMonster的博客-CSDN博客_boost linux 编译

如何在Linux和Windows下编译minizip库

OSG第三方库编译之二十一:minizip编译(Windows、Linux、Macos环境下编译)_翰墨之道的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值