よく使う機能がありますf()
。追加のコンパイルなしで簡単に使用できるようにf()
、ヘッダーファイルに入れたい:util.h
f()
user1.c
:
#include "util.h"
int main(){
f();
return 0;
}
util.h
:
void f(){
// do some job
}
のコンパイルuser1.c
:
gcc -o user1 user1.c
この問題は、2 つのコンパイル単位unit2.o
とがある場合に発生しunit3.o
ます。それらのソースコードは次のとおりです。
user2.c
:
#include "util.h"
void user2_function(){
f();
// do other jobs
}
user3.c
:
#include "util.h"
extern void user2_function();
int main(){
f();
user2_function();
return 0;
}
multiple definition of f
これらのソース コードを次のようにコンパイルしようとすると、エラーが発生します。
gcc -c user2.c
gcc -c user3.c
gcc -o user user2.o user3.o
問題は、問題をどのようにmultiple definition
解決できるかです。または、より良い解決策はありますか?
実際には、何百もの関数がutil.h
あり、約 50 の異なるコンパイル ユニットがあります。
次の理由から、ライブラリとユーティリティ関数のコンパイル手順の使用を避けようとしています。
- 私が使用するさまざまなプラットフォームがたくさんあります。
cmake
簡単な解決策、つまりを使用しないなどがあるのだろうか。- また、コプロセッサーのクロス コンパイルも使用します。
- ユーティリティ関数のコンパイルで使用されるフラグを、ユーザー コードのコンパイルで使用されるフラグと同じにしたい。