gpt4 book ai didi

c++ - 链接器生成的名称的差异 (C++/C) ($$FYZAXXZ - $$J0YAXXZ)

转载 作者:太空宇宙 更新时间:2023-11-04 12:43:40 24 4
gpt4 key购买 nike

我在链接我的项目时遇到问题。我收到此错误消息:

error LNK2019: unresolved external symbol "void __cdecl TimerInit(void)" (?TimerInit@@$$FYAXXZ)

TimerInit 函数位于同一项目的不同 .CPP 文件中。当我使用 DUMPBIN 查看相应的 .OBJ 文件的内容时,我看到编译器生成了这个符号:

?TimerInit@@$$J0YAXXZ

我不明白为什么是 'J0' 而不是 'F'。必须有调用约定。

这是针对 Visual Studio 2008,如果有区别的话。

最佳答案

使用undname命令行工具,我们可以看到.obj中的符号是

Undecoration of :- "?TimerInit@@$$J0YAXXZ"
is :- "extern "C" void __cdecl TimerInit(void)"

而链接器正在寻找的不是 extern "C"

我无权访问 VS 2008 来检查这一点,但看起来无论您在哪里定义 TimerInit 函数,它都在 extern "C" 声明中某种。较新版本的 Visual Studio 不导出损坏的外部“C”名称(TimerInit 将是 _TimerInit 或只是 TimerInit,具体取决于编译器版本) ,而且我不确定您的声明是什么样的,因为您没有在问题中显示它们。

要么删除 TimerInit 定义中的 extern "C",要么考虑升级到更新版本的 Visual Studio。

关于c++ - 链接器生成的名称的差异 (C++/C) ($$FYZAXXZ - $$J0YAXXZ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52805622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com