如何从VC8中的2个静态库中获取所有符号冲突

如何从VC8中的2个静态库中获取所有符号冲突,c,visual-studio,visual-studio-2005,static-libraries,static-linking,C,Visual Studio,Visual Studio 2005,Static Libraries,Static Linking,假设我有两个静态库 例1.a 例2.a 在这两个库中,我将定义10个相同的函数 在编译示例测试代码test.c时,我同时链接了静态libs ex1.a和ex2.a 在test.c中,我只调用3个函数,然后得到 链接器错误在ex1.a和ex2.a库中定义了相同的符号。这没有问题 我的问题是: 1.为什么此错误仅将3个函数显示为定义的多个函数。。为什么不列出所有10个功能 在VC8中,如何列出所有多个已定义的符号,而不在测试代码中实际调用该函数。。。 谢谢,这是因为,链接器在编译和链接具有函数调用的

假设我有两个静态库

例1.a 例2.a

在这两个库中,我将定义10个相同的函数

在编译示例测试代码test.c时,我同时链接了静态libs ex1.a和ex2.a

在test.c中,我只调用3个函数,然后得到 链接器错误在ex1.a和ex2.a库中定义了相同的符号。这没有问题

我的问题是: 1.为什么此错误仅将3个函数显示为定义的多个函数。。为什么不列出所有10个功能

在VC8中,如何列出所有多个已定义的符号,而不在测试代码中实际调用该函数。。。
谢谢,

这是因为,链接器在编译和链接具有函数调用的代码时,试图解析符号名。只有当代码有一些函数调用时,链接器才会尝试在测试代码或链接的库中解析它,这时它会找到多个定义。如果没有调用函数,那么我想没有问题。

您体验的是链接器的优化部分:默认情况下,它不会包含未引用的代码。编译器将创建多个对象文件,其中包含的代码很可能无法满足未解析的依赖项调用。因此,链接器获取所有传递的对象文件,并尝试为未解析的依赖项找到解决方案。如果失败,它将检查可用的库文件。如果有多个选项具有相同的确切名称/签名,它将开始抱怨,因为它无法决定为相同的代码选择哪一个选项这无关紧要,但可以想象不同的实现使用不同的内存后台工作,例如调试和发布内容

我能想到的检测所有这些多个定义的唯一且可能最简单的方法是创建另一个静态库项目,包括两个静态库中使用的所有源文件。创建库时,链接器将包含所有调用或导出的内容-只要导出了内容,链接器就不需要调用这些内容的特定代码来查看/包含所有内容

然而,我仍然不明白,作为一个整体,你到底想要完成什么。正在尝试查找两个库之间共享的代码