4

gnu/linux amd64 で静的ライブラリを使用して qt ベースのソフトウェアを構築しようとしていますが、成功していません (qt は静的に構築されています)。

現在、一部の人々が UPX を使用していることがわかります。だから私は動的ビルドを試してみましたが、実際、「ファイル」コマンドはバイナリを静的にリンクされていると認識します。私はそれを信頼できますか?代わりに statifier の使用を検討する必要がありますか?

前もって感謝します

編集

申し訳ありませんが、私は十分に明確ではありませんでした。QT フレームワークを使用してアプリケーションをビルドしようとしていますが、ビルド スクリプトが複雑で、共有ライブラリ用に作成されています。動的にリンクされたバイナリでアプリケーションをビルドできますが、動作していますが、静的にリンクされたライブラリを含むバイナリを取得したいと考えています。UPX ソフトウェア ( http://upx.sourceforge.net/ ) を試してみましたが、他のトピックで見たように、動的ライブラリを含むバイナリを静的ライブラリを含むバイナリに変換するために使用されていました。

しかし、それは私にはあまりにも魔法のようです.それは本当に機能していますか?

回答ありがとうございます。

4

1 に答える 1

2

いいえ、UPX は動的にリンクされたプログラムを静的にリンクされたプログラムに変換しません。

UPX は、実行可能ファイルのパッカーです。UPXの目標が圧縮することである場合、実際にはサイズが増加するため、プログラムを静的にリンクすることはありません。

ただし、UPX の動作方法により、file静的にリンクされた小さなスタブのみが表示されます。これはUPXの解凍ルーチンです。

UPX で圧縮されたプログラムを開始すると、(mainプログラムの通常の機能ではなく) このスタブが最初に実行されます。スタブ自体は静的にリンクされていますが、プログラムを解凍し、プログラムの動的ライブラリをロードして、通常どおり起動します。したがって、動的ライブラリがそこにある必要があります。そうしないと、解凍後にプログラムが正しくロードされません。

ご想像のとおり、実際には魔法ではありません。サイズを抑えるために何かを隠しているだけです。これらの他のライブラリにまだ問題がある場合は、別の質問を開くことを検討する必要があります。

于 2015-03-03T16:31:46.707 に答える