// File foo1.c :
#include <stdio.h> // once
void foo1(void);
void foo1(void){
puts("foo1");
}
// File foo2.c :
#include <stdio.h> // again
void foo2(void);
void foo2(void){
puts("foo2");
}
// File foomain.c :
#include <stdio.h> // yet again
void foo1(void); // again
void foo2(void); // again
int main(void){
foo1();
foo2();
puts("foomain");
return 0;
}
// create object files
gcc -fPIC foo1.c -o foo1.o // 1 stdio.h
gcc -fPIC foo2.c -o foo2.o // 1 stdio.h
// create shared library
gcc -fPIC -shared foo1.o foo2.o -o foo.so // foo.so contains stdio.h 2 times ?
// build entire program
gcc foo.so foomain.c -o foomain // foomain contains 1 stdio.h plus the 2 from foo.so ?
爲什麼整個程序包含3 stdio.h中?似乎多餘,爲什麼不只是1?編譯器不應該只需要1?整個源文件中都有重複的頭文件?
它是有道理的對象文件包含原型,但爲什麼他們必須在foomain.c中再次指定?編譯器不知道它們已經在foo.so中指定了嗎?
但是這是基於每個文件的文件,它不適用於其他文件,對不對? gcc帶有適當的警告標誌,如果有重複的話,會輸出警告(錯誤?)。 – 2012-04-23 14:53:23