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

标签 c 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

你会看到多重定义错误。

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

相关文章:

c - C 中类似函数的宏定义

c - 函数指针线程安全吗?

c - 为什么一个配合函数可以更快地收敛到解决方案?

c - 是否有描述 C 函数名称 "stand for"的文档(不是它们的作用——而是缩写名称的含义)?

android - arm-linux-androideabi-gcc 无法创建可执行文件 - 为 android armeabi 设备编译 ffmpeg

c++ - cout 是同步的/线程安全的吗?

c - 前向声明抛出重定义错误

c - 我第一次尝试创建一个单词列表,

c++ - 为什么显式位移运算会产生更大的 .s 文件?

c++ - 类内的 Char 数组初始化