gpt4 book ai didi

c - gcc 不会编译 SDL C 程序(对 SDL 函数的 undefined reference )

转载 作者:IT王子 更新时间:2023-10-29 00:50:16 26 4
gpt4 key购买 nike

我最近转向了 linux,但在使用 gcc 编译 SDL C 程序时遇到了问题。

我正在使用的命令:

gcc `sdl-config --cflags --libs` -o main main.c

即使通过分离 sdl-config 标志:

gcc `sdl-config --cflags` -c main.c
gcc `sdl-config --libs` -o main main.o

我遇到了同样的错误:

/tmp/ccHYyjKd.o: In function `main':
main.c:(.text+0xe): undefined reference to `SDL_SetMainReady'
main.c:(.text+0x18): undefined reference to `SDL_Init'
main.c:(.text+0x31): undefined reference to `SDL_SetVideoMode'
main.c:(.text+0x54): undefined reference to `SDL_MapRGB'
main.c:(.text+0x6b): undefined reference to `SDL_FillRect'
main.c:(.text+0x77): undefined reference to `SDL_Flip'
main.c:(.text+0x83): undefined reference to `SDL_WaitEvent'
main.c:(.text+0x90): undefined reference to `SDL_Quit'
collect2: error: ld returned 1 exit status

我非常简单的程序:

#include <stdio.h>
#include <stdlib.h>
#define SDL_MAIN_HANDLED
#include <SDL/SDL.h>

int main()
{
// SDL Initialize
SDL_SetMainReady();
SDL_Init(SDL_INIT_VIDEO);

// Screen Initialize
SDL_Surface *screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
Uint32 screenColor = SDL_MapRGB(screen->format, 255, 255, 255);
SDL_FillRect(screen, NULL, screenColor);
SDL_Flip(screen);

// Main Program Loop
SDL_Event event;
do
{
SDL_WaitEvent(&event);
} while (event.type != SDL_QUIT);

// SDL Quit
SDL_Quit();

return 0;
}

最佳答案

gcc 的参数顺序很重要。

了解 Invoking GCC (以及 gcc 使用的 binutils 的文档)。然后替换

 gcc `sdl-config --libs` -o main main.o

 gcc main.o  `sdl-config --libs` -o main

更好的是,学习如何使用 GNU make (它经常使用 GNU bash )并使用受 this answer 启发的 Makefile ...

此外,始终将 -Wall -g 传递给 gcc 直到您的程序没有错误(然后使用 -Wall -O2)

从开源程序中获取灵感 githubgitlab使用 SDL . 还可以考虑使用其他开源库和框架,例如 Qt , SFML , GTKmm等...并研究他们的示例代码。

关于c - gcc 不会编译 SDL C 程序(对 SDL 函数的 undefined reference ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20625232/

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