gpt4 book ai didi

c++ - 使用 C++ 使用 SDL2_gfx 问题

转载 作者:太空狗 更新时间:2023-10-29 21:01:01 26 4
gpt4 key购买 nike

当我将 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++ 中的库,但我似乎不太了解如何使用。任何帮助将不胜感激,我花了两天时间试图解决这个问题。

最佳答案

这对 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,您没有添加导致这种情况发生的代码。

在文档中有描述:

The application's main() function must be called with C linkage, and should be declared like this:

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

所以如果你把:

#ifdef __cplusplus
extern "C"
#endif

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

关于c++ - 使用 C++ 使用 SDL2_gfx 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19916662/

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