unix をターゲットとする Ubuntu マシンで GCC を使用してアプリを静的にコンパイルするにはどうすればよいですか? また、32 ビット/64 ビットのマシンと、異なるバージョンの GLIBC を搭載したマシン、または UNIX C++ アプリが通常依存しているマシンをどのようにターゲットにすればよいでしょうか? 次に、このアプリをバイナリ形式で配布し、ソースからコンパイルする必要なく、UNIX マシンで実行したいと考えています。
2 に答える
Linux で実行できるようにコンパイルするには、次のようにコンパイルします。
g++ -o myapp myapp-a.cop myappb.cop -L mylib1
これは、Linux のほとんどのバージョンと、FreeBSD のいくつかのバージョンでも動作するはずです。
これは libstdc++ に対して静的にリンクするわけではありませんが、これはおそらくより良い方法です。経験則として、OS c lib に対して動的にリンクして、syscall abi が変更された場合でもアプリが動作できるようにする必要があります。
フラグの 1 つとして「-m32」を使用して、64 ビット マシンから 32 ビット コンパイルを強制できます。コンパイルモードを 32 ビットに設定します。
Windows でのコンパイルに関しては、はい。あなたはそれを行うことができます。これはクロスコンパイルと呼ばれます。まず、Linux を対象とするツールチェーンをコンパイルする必要があります。
これは、静的にコンパイルされた 32 ビットのみの実行可能ファイルを作成する方法です。これは、既知の Linux で動作し、ライブラリの欠落について文句を言う必要はありません。
g++ -m32 -static -o myprog myprog.cpp
これの欠点の 1 つは、実行可能ファイルの最小サイズが少なくとも 600 KB になることです。
注: コンパイル エラーが発生する場合は、パッケージがg++-multilib
インストールされていることを確認してください。