有没有什么方法可以让gcc在静态库和主代码(或另一个静态库)中检测重复的符号
情况是这样的:
main.c错误地包含了一个函数定义,例如签名uint foohash(const char*)
foo.c还包含一个带有签名的函数定义uint foohash(const char*)
foo.c和其他源文件被编译成一个静态的util库,主程序链接到这个库中,例如:

 gcc -o main main.o util.o -L ./libs -lfooutils

所以,现在main.o和libs/libfooutils.a都包含一个foohash函数。可能链接器在main.o中找到了这个符号,而不必在其他地方寻找它。
我们有没有办法让海合会发现这种情况?

最佳答案

事实上,正如Simon Richter所说,--whole-archive选项可能很有用。尝试将命令行更改为:

 gcc -o main main.o util.o -L ./libs -Wl,--whole-archive -lfooutils -Wl,--no-whole-archive

你会看到一个多重定义错误。

关于c - gcc在静态库中检测重复的符号/函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38545884/

10-11 23:14
查看更多