【发布时间】:2010-11-24 16:10:25
【问题描述】:
假设您有两个静态库 A 和 B,这样 A 引用 B 中的方法。是否可以将可执行文件静态链接到 A 和 B,这样 A 引用的 B 中就没有未解析的符号?
这是我的情况:
当我尝试在 Visual Studio 2010 中以这种方式链接所有内容时,A 和 B 之间存在未解析的符号。但应用程序和 A 之间没有。它抱怨的符号具有 __imp 前缀(它没有,并且不应该存在于 B 的 DUMPBIN 中)。即使没有一个库是作为 DLL 构建的并且我在所有项目中都包含了所有必需的“附加库依赖项/目录”,为什么还要寻找带有 __imp 前缀的符号?此外,一切都是用完全相同的编译器构建的。
编辑:如果库 B 构建为带有导入库而不是静态库的 DLL,则所有内容都将正确链接,这可能会有所帮助。
编辑:我几乎可以肯定这不是导致 declspec() 或其他原因的预处理器条件,因为当应用程序使用 B 时没有链接器错误。就在 A 使用 B 时。
回答:Edwin 和 JimR 都是正确的,实际上在标头中使用了一个宏导致了 declspec,但是当他们第一次提到这种可能性时,我太固执了,没有注意到它。感谢大家的耐心等待。
【问题讨论】:
标签: c++ visual-studio linker static-libraries