我有一个经常使用的功能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
当有两个编译单元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
等。 - 我还对协处理器使用交叉编译。
- 我希望编译实用程序函数时使用的标志与编译用户代码时使用的标志相同。