gcc检测静态库中的重复符号/函数

我们有什么方法可以让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中找到了这个符号,并且不会在其他地方寻找它.

有什么方法可以让gcc检测到这种情况吗?

确实如Simon Richter所说,–whole-archive选项可能很有用.尝试将命令行更改为:

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

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

https://stackoverflow.com/questions/9093891/gcc-detect-duplicate-symbols-functions-in-static-libraries

转载注明原文:gcc检测静态库中的重复符号/函数