c - Unresolved external symbol 错误。 dumpbin 显示附加到符号的额外 @number

标签 c visual-studio-2008 linker-errors

我对C的了解非常有限。我正在尝试升级我的项目中使用的库。我用更新的文件替换了旧的静态库和头文件。当我尝试构建项目时,收到“无法解析的外部符号”错误。

我使用dumpbin检查了旧的和新的lib文件,发现新库中的符号有一个额外的@number(其中number是8、16、24、28、32、40、48、52之一, 72 或 80) 附加。有人可以告诉我如何继续吗?

更新

错误以某种方式停止了。但现在我收到错误

LIBCMT.lib(tidtable.obj) : error LNK2005: __encode_pointer already defined in MSVCRT.lib(MSVCR90.dll)

tried adding /NODEFAULTLIB:LIBCMT.lib 到库的编译器选项。但我仍然遇到同样的错误。

最佳答案

附加有@符号和数字的符号是使用stdcall calling convention的函数。 。看起来您正在使用 stdcall 作为默认值而不是 cdecl 来编译新库。

查看头文件中的函数声明。您很可能会看到一些指示此备用调用约定的内容。如果您不这样做并且您确定您拥有的静态库与头文件匹配,您可以更新 function declarations在头文件中包含 stdcall 调用约定。然后,在编译使用静态库的程序时,程序中的符号将正确查找 stdcall 样式函数符号。

解决更新

这可能与您链接静态库的内容以及链接最终二进制文件的内容发生冲突。您的静态库和最终程序二进制文件都必须链接到相同的 C 运行时。

关于c - Unresolved external symbol 错误。 dumpbin 显示附加到符号的额外 @number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5605838/

相关文章:

c++ - 什么是 undefined reference /未解析的外部符号错误以及如何修复它?

c - 需要说明算法的时间复杂度解法

c - C 语言的公历

c - 指针,计数器变得困惑

visual-studio - 在 Visual C++ 2008 中设置调试和发布设置

c++ - 模板方法上的 gcc 链接错误

c - 按钮处理(伪代码/c)

visual-studio-2008 - 如何在MSVS intellisense中显示返回值摘要?

c# - 请引用 CSS 和其他与 Visual Studio c# 一起使用的简单样式方法的链接

c++ - 无法定位错误cpp linux