使用C ++使用SDL2_gfx问题

时间:2013-11-11 21:50:56

标签: c++ sdl

当我将SDL2_gfx与其中包含的common.c /common.h文件一起使用,然后使用cpp而不是使用VS201X的c扩展时,我得到了LNK2019:未解析的外部符号_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 ++中使用该库,但似乎我不知道如何弄清楚如何。任何帮助将不胜感激,我花了两天时间试图解决这个问题。

2 个答案:

答案 0 :(得分:4)

这对SDL来说有点儿了。

它的作用是#define main SDL_main

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

为了使用它,SDL想要一个未编码的SDL_main链接,因为您只是重命名了test.c - &gt; test.cpp,你没有添加代码来导致这种情况发生。

它在文档中描述:

  

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

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

所以如果你把:

#ifdef __cplusplus
extern "C"
#endif

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

答案 1 :(得分:0)

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

extern "C"
{
#include "common.h"
}