3

我们正在 linux 上开发一个相当大的基于 Qt 的项目,并且我们达到了最终的 RC1 阶段。

现在,我们遇到了一些非常奇怪的事情:为了投入生产,我们在静态链接库列表中添加了另一个 .a 库。

该库已链接并且应用程序运行,但资源文件中的每个 .png 都已损坏,这是启动时的输出:

libpng 错误:IHDR:CRC 错误

似乎 libpng 无法处理那些无效的 png(当然)。文件在那里并且大小正确,在静态链接最终库后它们只是变成空白。该库本身不在任何地方使用,它只是被链接。

有没有人遇到过这样的情况?有已知的解决方法吗?我们在 QtCreator 2.3.0 上使用 Qt 4.7.4 x64,我们暂时不想升级,但这是我们目前唯一想到的选择。

4

1 回答 1

4

它可能适合符号的问题。静态库和 libpng 可能同时链接到其他库,并且在编译/加载时链接或解析时发生了一些奇怪的事情。

您可以使用objdump命令检查符号(objdump -tT /usr/bin)

您是否尝试在编译/链接时修改库顺序?我的意思是,例如,

gcc -lmylibrary -lQt -lOtherLOLibrary 

代替

gcc -lOtherLOLibrary -lQt -lmylibrary

而且我想我遗漏了一些东西,为什么要链接到未使用的库?

于 2012-09-14T10:30:21.203 回答