c++ - 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 编写libjpeg
器libmwjpegreader
使用libmwjpegreader
函数而不是libjpeg
's.
解决方法是在启动可执行文件之前添加LD_PRELOAD=libjpeg
,这会导致正确的行为。这通过LD_DEBUG=files ./executable |& grep 'calling init'
- 库的加载顺序变化和应用程序按预期运行来验证。
是否有可能调整库的加载顺序以执行,而不依赖于LD_PRELOAD
?编译时和联动顺序有关系吗?我正在使用CMAKE
作为我的构建环境,但包括libjpeg
或转移位置cmakelists.txt
没有效果。
解决方案
推荐阅读
- c++ - 为什么在 `std::add_pointer_t` 中需要 SFINAE?
- elasticsearch - 如何提高弹性搜索查询结果(异常值)中最受欢迎的(前四分之一)
- typescript - 如何将类型定义为定义为 [key: string] 键/值结构的对象键列表 - TypeScript
- java - 如何在 Gradle 中使用 Quarkus gRPC 扩展?
- image - ffmpeg:将多个图像叠加到视频中
- c - 如何从c中的函数返回字符串
- javascript - 根据在第二个数组中具有匹配记录的列名更改 javascript 中对象数组中的键名
- swift - 如何在 Swift 5 中创建我自己的 UIAlertController?
- python - Tkinter 窗口全宽而不被缩放
- java - Hadoop 计数问题中的 Map Reduce