wmdlinuxshell 2024-03-26 17:48 采纳率: 1.6%
浏览 15

AppData\Local\Temp\ccaA0biQ.o:show.c:(.text+0x15): undefined reference to `SDL_Init'

img


#include <SDL2/SDL.h>
 
int main(int argc, char* argv[]) {
    SDL_Init(SDL_INIT_VIDEO); // 初始化SDL
    SDL_Window *window = SDL_CreateWindow("C Graphics", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN); // 创建窗口
    SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); // 创建渲染器
 
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); // 设置渲染颜色为黑色
    SDL_RenderClear(renderer); // 清除渲染器
 
    SDL_Rect rect = {100, 100, 200, 200}; // 定义一个矩形
    SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); // 设置矩形的颜色为红色
    SDL_RenderFillRect(renderer, &rect); // 绘制矩形
 
    SDL_RenderPresent(renderer); // 显示渲染内容
 
    SDL_Delay(2000); // 等待2秒
 
    SDL_DestroyRenderer(renderer); // 销毁渲染器
    SDL_DestroyWindow(window); // 销毁窗口
    SDL_Quit(); // 退出SDL
 
    return 0;
}

gcc show.c -o show.exe报错

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2024-03-26 17:49
    关注

    wmdlinuxshell 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    根据你提供的编译错误,出现了多次"undefined reference"错误,这意味着编译器无法找到相应的函数定义。其中最明显的错误是无法找到SDL的函数定义。

    为了解决这个问题,你需要确保已经正确安装SDL,并且在编译时链接正确的SDL库。下面是解决该问题的步骤:

    1. 确保已经正确安装了SDL库。你可以从SDL的官方网站(https://www.libsdl.org/)下载并安装最新版本的SDL库。

    2. 确保在代码中包含了SDL的头文件。在你提供的代码中已经包含了<SDL2/SDL.h>

    3. 确保在编译命令中指定了SDL的库路径和库文件名。你可以使用-l选项来指定要链接的库文件。例如,如果你使用的是Cygwin或MinGW编译器,可以使用以下编译命令:

      gcc show.c -o show.exe -I/path/to/sdl/include -L/path/to/sdl/lib -lSDL2
      

      其中,/path/to/sdl/include是SDL的头文件路径,/path/to/sdl/lib是SDL的库文件路径,-lSDL2指定要链接的SDL库文件。

      请注意,你需要将上述命令中的/path/to/sdl/include/path/to/sdl/lib替换为你实际安装SDL的路径。

    4. 如果仍然出现链接错误,请确保你使用的是与SDL库版本相匹配的编译器。如果SDL库是32位版本,你需要使用32位编译器进行编译。如果SDL库是64位版本,你需要使用64位编译器进行编译。

    综上所述,以下是解决该问题的步骤总结:

    1. 确保已正确安装SDL库。
    2. 在代码中包含正确的SDL头文件。
    3. 使用编译命令指定SDL库的路径和库文件名。
    4. 确保使用与SDL库版本匹配的编译器。

    修改后的代码:

    #include <SDL2/SDL.h>
     
    int main(int argc, char* argv[]) {
        SDL_Init(SDL_INIT_VIDEO); // 初始化SDL
        SDL_Window *window = SDL_CreateWindow("C Graphics", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN); // 创建窗口
        SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); // 创建渲染器
     
        SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); // 设置渲染颜色为黑色
        SDL_RenderClear(renderer); // 清除渲染器
     
        SDL_Rect rect = {100, 100, 200, 200}; // 定义一个矩形
        SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); // 设置矩形的颜色为红色
        SDL_RenderFillRect(renderer, &rect); // 绘制矩形
     
        SDL_RenderPresent(renderer); // 显示渲染内容
     
        SDL_Delay(2000); // 等待2秒
     
        SDL_DestroyRenderer(renderer); // 销毁渲染器
        SDL_DestroyWindow(window); // 销毁窗口
        SDL_Quit(); // 退出SDL
     
        return 0;
    }
    

    请记住根据你的实际情况修改编译命令中的路径。希望这些信息能够帮助到你解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月26日