gpt4 book ai didi

c - Visual C++ 2017,忽略 extern "C"?将 C++ 代码链接到 C 库时出现 LNK2019 错误

转载 作者:行者123 更新时间:2023-11-30 16:37:12 26 4
gpt4 key购买 nike

解决方案有一个项目,其中包含一个用 C 编写的静态库(一个 .h 文件、一个 .c 文件)和一个基于该库的实用程序 (.cxx),用 C++ 编写。

该库编译没有错误。该实用程序也可以编译,但无法链接并出现以下错误:

1>abc.obj : error LNK2019: unresolved external symbol "struct DEFListen * __cdecl DEFisten(int,char *,int)" (?DEFListen@@YAPAU0@HPADH@Z) referenced in function _main

库的 header 包含外部“C”防护:

#ifdef __cplusplus
extern "C" {
#endif

通过将垃圾放入 ifdef 中,我在按预期编译(而不是链接)实用程序时会收到编译警告,因此我知道 __cplusplus 实际上是在编译实用程序时定义的,而不仅仅是拼写错误。

但是,错误消息显示了相关函数的函数签名(以及损坏的名称)。实用程序的目标文件上的 dumbin/symbols 当然确认该对象包含损坏的符号。

总之:extern "C"{ 肯定在编译时被解析但被忽略。为什么?

最佳答案

问题非常愚蠢:右大括号代码(如下)已被剪切并粘贴到备用位置,同时重新排列声明,在 extern block 之外留下了几个函数。

#ifdef __cplusplus
}
#endif

抱歉,我在发帖寻求帮助之前没有发现这一点。

我把这个可耻的帖子留给将来同样愚蠢的人(可能是我)发现。

关于c - Visual C++ 2017,忽略 extern "C"?将 C++ 代码链接到 C 库时出现 LNK2019 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48070780/

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