GCC/Clang如何强制不使用未定义的符号?

GCC/Clang如何强制不使用未定义的符号?,c,gcc,linker,clang,C,Gcc,Linker,Clang,我正在用GCC/Clang编写一个C程序来编译,我遇到了以下问题:我试图确保编译器不允许我在程序中留下任何未定义的符号。我理解翻译单元应该能够使用未定义的符号进行编译,但我不希望它链接任何静态库,除非它能够找到所有内部符号。例如: #包括 整数相加(整数a、整数b); 内部主(空) { printf(“你好,世界。\n”); } 我希望这个程序应该编译,但它不应该链接(当然,除非我能找到一种方法说明add是共享库的一部分),事实并非如此,它编译时没有警告也没有错误,即使有-Werror-Wal

我正在用GCC/Clang编写一个C程序来编译,我遇到了以下问题:我试图确保编译器不允许我在程序中留下任何未定义的符号。我理解翻译单元应该能够使用未定义的符号进行编译,但我不希望它链接任何静态库,除非它能够找到所有内部符号。例如:

#包括
整数相加(整数a、整数b);
内部主(空)
{
printf(“你好,世界。\n”);
}
我希望这个程序应该编译,但它不应该链接(当然,除非我能找到一种方法说明
add
是共享库的一部分),事实并非如此,它编译时没有警告也没有错误,即使有
-Werror-Wall--pedantic错误
。GCC/Clang中是否有任何选项不允许编译静态库,除非定义了所有内部符号?否则,我认为这是一场即将发生的灾难,尤其是在大型项目中


提前谢谢大家。

“但它不应该链接”。你为什么这么想<代码>添加从未实际使用过。我理解这一点,但我的意思是理想情况下我不希望它链接;我想强制它不要链接。这是我的问题。但是……没有未定义的符号。原型不会创建任何符号引用。你到底想实现什么?或者你只是举了一个例子,但实际上并没有说明你要解决的真正问题?我希望它能确保所有原型都得到实现,但只针对静态库,因为这在共享库中不起作用。