当我将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 ++中使用该库,但似乎我不知道如何弄清楚如何。任何帮助将不胜感激,我花了两天时间试图解决这个问题。
答案 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"
}