10

root アクセス権のないマシンで実行したいコードがあります。そのマシンには、このコードを実行するために必要なライブラリの一部がありません。

コンパイル時にすべての依存関係を含める方法はありますか? 結果のファイルがかなり大きくなる可能性があることを認識しています。

4

1 に答える 1

12

あなたが探しているのは静的コンパイルです。静的コンパイルを実行すると、すべてのライブラリが実行可能ファイル自体に含まれるため、特定のシステムやディストリビューションなどでの依存関係チェーンについてそれほど心配する必要はありません。

これは次の方法で実行できます。

gcc -Wl,-Bstatic -llib1 -llib2 file.c

-Wl、次のフラグをリンカに渡し、可能であれば静的にリンクするように指示-Bstaticします。lib1lib2

または、次を試してください。

gcc -static file.c

コンパイルは、非特権システムのアーキテクチャと一致する必要があります。また、コンパイル システムにスタティック ライブラリをインストールする必要があります ( lib.a) 。

適切にコンパイルされていれば、実行時に「動的実行可能ファイルではありません」と表示されるはずです。

ldd a.out
于 2013-04-27T00:17:54.423 に答える