SDL_INIT未声明于作用域的SDL2编译错误求助
解决SDL初始化的编译与链接问题
别担心,刚接触SDL开发踩这种坑太正常了!咱们一步步来搞定这两个问题~
首先解决当前的编译错误:'SDL_INIT' was not declared in this scope
你代码里犯了一个很容易忽略的大小写错误:SDL的初始化函数是**SDL_Init**(注意函数名最后是小写的init),而不是你写的SDL_INIT——SDL_INIT_EVERYTHING才是传给这个函数的初始化参数宏!
修正后的代码如下:
#include <iostream> #define SDL_MAIN_HANDLED #include <SDL2/SDL.h> int main(int argc, char ** argv) { if (SDL_Init(SDL_INIT_EVERYTHING) < 0 ) { // 这里把SDL_INIT改为SDL_Init std::cout << " error starting SDL " << SDL_GetError() << std::endl; } return EXIT_SUCCESS; }
再说说之前遇到的undefined reference to SDL_Init链接错误
虽然你换成了32位SDL2版本,但还要确保编译链接时正确配置了SDL的路径和库:
- 编译阶段:用
-I参数指定SDL头文件的目录,比如-IC:\SDL2\include - 链接阶段:用
-L参数指定SDL库文件的目录,再加上链接选项-lSDL2main -lSDL2(注意顺序,SDL2main要放在前面),比如-LC:\SDL2\lib\x86 -lSDL2main -lSDL2 - 还要确保你的GCC编译器是32位版本,和SDL2的32位版本完全匹配,否则还是会出现链接不匹配的问题
另外你现在写的#define SDL_MAIN_HANDLED放在#include <SDL2/SDL.h>之前是正确的,这个宏会告诉SDL不要接管main函数,避免入口函数相关的异常。
内容的提问来源于stack exchange,提问作者baguettio
相关产品推荐
相关产品推荐

