有什么方法可以让 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
你会看到多重定义错误。
关于c - gcc 检测静态库中的重复符号/函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38545884/