web-dev-qa-db-ja.com

すべてのディストリビューションで実行される静的バイナリを作成するにはどうすればよいですか?

Supertuxkartやregnum onlineなどの一部のLinuxアプリには静的バイナリがあり、ダウンロード後は共有ライブラリをインストールする必要なく機能します。すべてのディストリビューションで。どうすればこのようなアプリを作ることができますか?

18
user1873947

すべてのリソースが実行可能ファイルに含まれていることを確認し、実行可能ファイルを静的にリンクします。

gcc -o foo main.o -static -lbaz -lbar

ただし、これには欠点もあります。動的リンクを調べます。

18
thiton

@ user1873947、ツール「ldd」はdynamicライブラリの場合、他のライブラリへの依存関係を通知しますが、staticライブラリの場合は通知しません。 staticライブラリの場合、ツール「nm」を調べて、解決できなかったシンボルの名前(「関数名」)を取得します。後で、 "objdump"ツールに興味を持つかもしれません。不足している関数のライブラリがすぐにわからない場合は、/ usr/includeで宣言されている関数がどこかにあるかどうかを確認してください。これはツール「grep」で行いますが、シンボル名の先頭の「_」は省略します。それを宣言するファイルは、通常、対応する.aファイルも出荷する-devパッケージから派生します。

0
smoe