3

当我将 SDL2_gfx 与包含在其中的 common.c /common.h 文件一起使用,然后使用 VS201X 使用 cpp 而不是 c 扩展名时,我得到 LNK2019: unresolved external symbol _SDL_main

这意味着如果我将包含 main 的文件更改为 test.c,它就会编译。当我将它改回 text.cpp 时,它无法编译。我认为这表明它只能用作 C,而不是 C++。

下面是我从 SDL2_gfxPrimitives.c 复制的代码(添加了空格以便它们显示):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>

#include "common.h"

#include "SDL2_gfxPrimitives.h"

static CommonState *state;

int main(int argc, char* argv[])
{
/* Initialize test framework */
state = CommonCreateState(argv, SDL_INIT_VIDEO);

return 1;
}

我需要在 C++ 中使用该库,但似乎我不知道如何弄清楚。任何帮助将不胜感激,我花了两天时间试图解决这个问题。

4

2 回答 2

4

这对 SDL 来说有点小问题。

它的作用是#define main SDL_main

这重命名int main(int argc, char *argv[])int SDL_main(int argc, char *argv[]).

为了使用它,SDL 想要一个未损坏SDL_main的链接,并且因为您只是重命名了test.c-> test.cpp,所以您没有添加代码来导致这种情况发生。

它在文档中有所描述:

应用程序的 main() 函数必须使用 C 链接调用,并且应该像这样声明:

 #ifdef __cplusplus 
 extern "C" 
 #endif 
 int main(int argc, char *argv[]) 
 { 
 } 

所以如果你把:

#ifdef __cplusplus
extern "C"
#endif

在主函数声明之前,它应该正确链接。

于 2013-11-11T22:35:50.333 回答
0

我想出了一个解决办法。我不得不把这段代码放进去。另外,上面的答案很好。现在我也知道为什么会这样了。谷歌没有找到该文件。

extern "C"
{
#include "common.h"
}
于 2013-11-12T01:16:10.067 回答