我们有什么方法可以让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
Run Code Online (Sandbox Code Playgroud)
所以,现在main.o和libs/libfooutils.a都包含一个foohash函数.据推测,链接器在main.o中找到了这个符号,并且不会在其他地方寻找它.
我们有什么方法可以让gcc检测到这种情况吗?
事实上,正如西蒙·里希特所说,--whole-archive
选择是有用的。尝试将命令行更改为:
gcc -o main main.o util.o -L ./libs -Wl,--whole-archive -lfooutils -Wl,--no-whole-archive
Run Code Online (Sandbox Code Playgroud)
你会看到一个多重定义错误。
归档时间: |
|
查看次数: |
4919 次 |
最近记录: |