gpt4 book ai didi

c++ - 尽管使用 EXTERN "C",但从 C++ 调用 C 函数时出现链接器错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:07 26 4
gpt4 key购买 nike

我正在使用这个库 http://rtmpdump.mplayerhq.hu/librtmp.3.html这是用C写的。它已经在其所有定义中使用了 extern "C"。但是当我从我的 [main.cpp] 文件中调用一个函数时,编译器仍然显示这些错误:

[1>main.obj : error LNK2028: unresolved token (0A00000F) "extern "C" struct RTMP * 
__cdecl RTMP_Alloc(void)" (?RTMP_Alloc@@$$J0YAPAURTMP@@XZ) referenced in function "int
__cdecl main(void)" (?main@@$$HYAHXZ)]

[1>main.obj : error LNK2019: unresolved external symbol "extern "C" struct RTMP *
__cdecl RTMP_Alloc(void)" (?RTMP_Alloc@@$$J0YAPAURTMP@@XZ) referenced in function "int
__cdecl main(void)" (?main@@$$HYAHXZ)]

我用的是Visual Studio 2008,没有编译错误。我错过了什么?

最佳答案

这是一个符合症状的场景。两个源文件和一个 header 。

first.c

#include "first.h"

struct RTMP *RTMP_Alloc()
{
return (struct RTMP *) 0;
}

second.cpp

#include "first.h"

int main (int argc, char **argv)
{
RTMP *result;

result = RTMP_Alloc();

return 0;
}

first.h

#ifdef __cplusplus
extern "C"
#endif
struct RTMP
{
int val1;
int val2;
} ;

struct RTMP *RTMP_Alloc();

请注意,extern "C" 仅适用于结构定义。要更正它,要么需要将其插入到 RTMP_Alloc 定义之前,要么对于大块更容易,将其放入 extern "C"{ ... } 结构中(请注意花括号的添加)。

关于c++ - 尽管使用 EXTERN "C",但从 C++ 调用 C 函数时出现链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18592358/

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