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 に答える