首页 > 解决方案 > C++:在运行时影响库加载顺序

问题描述

ubuntu 18.04 LTS 作为 WSL,Visual Studio 16.6.0,cmake 3.10。问题是关于在运行时/之前加载库,而不是在编译时(至少我这么认为):

我在一个应用程序上工作,它将曲面图写入jpeg图像并将图像与参考进行比较。jpeg writer 依赖libjpeg.so,而比较部分依赖libmwjpegreader.so.

构建和编译正常,但在Segmentation fault (core dumped)执行第一个 jpeg 文件期间导致:显然,两者都实现了类似的功能,出于某种原因,jpeg 编写libjpeglibmwjpegreader使用libmwjpegreader函数而不是libjpeg's.

解决方法是在启动可执行文件之前添加LD_PRELOAD=libjpeg,这会导致正确的行为。这通过LD_DEBUG=files ./executable |& grep 'calling init'- 库的加载顺序变化和应用程序按预期运行来验证。

是否有可能调整库的加载顺序以执行,而不依赖于LD_PRELOAD?编译时和联动顺序有关系吗?我正在使用CMAKE作为我的构建环境,但包括libjpeg或转移位置cmakelists.txt没有效果。

标签: c++cmakelibjpeg

解决方案


推荐阅读