静的Cコンパイラを入手するにはどうすればよいですか?


8

私はchroot環境で遊んでいますが、あまり多くのライブラリを移動する必要なく、各環境でいくつかの基本的なビルドツールを簡単にセットアップできるように、移植可能なCコンパイラが欲しいです。

GCCは私がやりたいことに対してかなり膨らんでいるように見えますが、静的なgccを構築するのがかなり簡単であれば、数十メガバイトを気にしないでしょう。

私はまた、Tiny C Compilerを見ています。これは小さいですが、それでも印象的な機能セットがあるように見えます。ただし、ソースディレクトリで./configure --helpを実行しても、tccを静的にビルドするためのオプションは表示されず、それ以外の場合にどのように実行されるかわかりません。


副次的な懸念であるメモリ使用量に答えるために、いくつかの解決策を示します。GCCへのハードリンクのみを含むシャドウディレクトリを作成できます。Dockerコンテナーを使用できます(コンテナーはchrootよりも安全であり、Dockerはメモリを節約できるユニオンファイルシステムを提供します)。
ctrl-alt-delor 2017年

回答:


1

静的バイナリの構築は、-staticを指定してgccを実行するのと同じくらい簡単であるか、ldが直接呼び出されている場合は-Bstaticを使用します。試す

CFLAGS=-static make

実行後configure。それが失敗した場合、結果は明らかです。たとえば、リンク時の未定義の参照のラフト。


1
make CFLAGS=-staticたった今試しました。makeがに関する警告を出力dlopenし、chroot環境で実行可能ファイルを実行しようとすると、/usr/lib/crt1.o .. crti,o .. crtn.o見つからないエラーが表示されます。「リンク時の未定義の参照」とはどういう意味ですか?
math4tots

私が予期していたエラーは、crt1.oなどのライブラリの静的バージョンが欠落していることが原因でしたが、リンカはすぐに文句を言うでしょう。実行時にエラーが表示される場合は、バイナリが静的にリンクされていません。
カイルジョーンズ

math4totsは、スタンドアロンバイナリを生成するCコンパイラではなく、スタンドアロンバイナリ(または少なくとも簡単に識別できるファイルのセット)として機能するCコンパイラを必要としています。
Gilles 'SO-悪をやめる'

1
はい、わかりました。静的にリンクされたコンパイラーを作成することは、必要な最初のステップであり、その疑問が問われているようです。
カイルジョーンズ

1
@Gilles Cコンパイラをスタンドアロンバイナリとして取得する最良の方法は、既存のコンパイラを使用してソースからビルドすることです。
OrangeDog 2012

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.