21

いくつかの C ソース ファイルがあり、使用していgccます。基本的に、それらすべてをコンパイルして、1 つのオブジェクト ファイルを作成したいと考えています。私がしようとすると:

gcc -c src1.c src2.c src3.c -o final.o

私は得る:

gcc: cannot specify -o with -c or -S with multiple files

私が試してみると:

gcc -c src1.c src2.c src3.c

3 つの異なるオブジェクト ファイルを取得します。すべてのファイルをコンパイルして 1 つのオブジェクト ファイルを返すようにするにはどうすればよいgccですか (その名前も指定したい)。ありがとうございました。

これには別のより一般的なアプローチがあるかもしれませんが、この場合は教えてください。

4

7 に答える 7

26

複数のソース ファイルを 1 つのオブジェクト ファイルにコンパイルすることはできません。オブジェクト ファイルは、1 つのソース ファイルとそのヘッダー (翻訳単位とも呼ばれます) をコンパイルした結果です。

コンパイルされたファイルを結合したい場合は、通常、次のarコマンドを使用して静的ライブラリに結合します。

$ ar cr libfoo.a file1.o file2.o file3.o

次に、リンク時にこの静的ライブラリを使用できます。オブジェクト ファイルとして直接渡すこともできます。

$ gcc file4.o libfoo.a -o myprogram

-lまたはフラグ付きのライブラリとしてリンクする

$ gcc file4.o -L. -lfoo -o myprogram
于 2013-08-12T08:17:25.790 に答える
12

これは通常の進め方ではありませんがfinal.c、次の内容で新しいファイルを作成することで、簡単に目的を達成できます。

#include "src1.c"
#include "src2.c"
#include "src3.c"

その後、次のようにコンパイルできます。

gcc -c final.c -o final.o

個別にコンパイルしたときに各ファイルが正常にコンパイルされたとしても、問題がある可能性があることに注意してください。コンパイル エラーを読んでください。これは、この方法でソース ファイルを 1 つにマージするときに、特にマクロ定義とインクルードで発生する傾向があります。

于 2013-08-12T08:17:43.333 に答える
9

あなたはこれを探しているかもしれません:

ld -r src1.o src2.o src3.o -o final.o

しかし、それらをアーカイブするのはいつでもいいことです。

ar rvs libmy.a file1.o file2.o file3.o

次に-lmy、リンクに使用します。

于 2013-08-12T08:17:13.217 に答える
5

複数のソース ファイルを 1 つのオブジェクト ファイルに結合するには (少なくとも gcc 4.1 以降)、コンパイラ/リンカー オプション --combine を使用します。

(編集) 後でコンパイラ オプション -flto に置き換え、コンパイル状態に応じて自動リンク: flto を使用するための要件

于 2015-05-26T08:25:39.203 に答える
0

final.cすべてのファイルを含むを作成してから、コマンド.cを使用してこの最終版をコンパイルできますgcc -c final.c

また

もう 1 つの方法は、archive.Build all files を使用して、それぞれのファイルを取得し.o、アーカイブしてから、それらすべてのファイルを含む 1 つのライブラリに格納すること.oです。

于 2013-08-12T08:18:04.203 に答える
0

使ってみて

gcc -o final file1.c file2.c file3.c

わたしにはできる。

于 2014-01-19T08:35:06.123 に答える