gpt4 book ai didi

c - 对 SDL_Freesurface 的 undefined reference

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:34 25 4
gpt4 key购买 nike

我在编译我的程序时遇到了问题。

首先,这是我正在使用的ma​​kefile:

LFLAGS = `sdl-config --cflags` `sdl-config --libs` -lSDL -lSDL_image 
CFLAGS = -I/usr/include/SDL
HFLAGS = main.h fisherman.h jdv.h
all: jdv

jdv: main.o fisherman.o jdv.o
gcc main.o fisherman.o jdv.o $(LFLAGS) -o jdv -g -Wall
main.o: main.c $(HFLAGS)
gcc -c main.c $(CFLAGS)
fisherman.o: fisherman.c $(HFLAGS)
gcc -c fisherman.c $(CFLAGS)
jdv.o: jdv.c $(HFLAGS)
gcc -c jdv.c $(CFLAGS)
clean:
rm -f *.o

程序示例:

在main.h中

extern SDL_Surface * event;
extern SDL_Surface * map;

在 main.c 中

#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>
#include "main.h"

void loadGame()
{
SDL_Surface * event = NULL;
SDL_Surface * map = NULL;
...
}

这是输出:

make
gcc main.o fisherman.o jdv.o `sdl-config --cflags` `sdl-config --libs` -lSDL -lSDL_image -lSDL_mixer -o jdv -g -Wall
main.o: in « main »:
main.c:(.text+0x119): undefined reference to « event »
main.c:(.text+0x195): undefined reference to « event »
main.c:(.text+0x1d1): undefined reference to « map »

它会在不同的变量上出现大约 75 个这样的错误。但它们都是由于一个全局变量。

我认为这是由于链接问题,但我不知道它是来 self 的 makefile,还是我创建全局变量失败。为什么它告诉我“未定义的引用”?谢谢。

编辑:我运行了 sdl-config --libs -> 输出:

-L/usr/lib/x86_64-linux-gnu -lSDL

最佳答案

main.h 中,您将 eventmap 声明为全局变量。

main.c 中,您将 eventmap 定义为 loadGame() 中的局部变量。这些隐藏了全局变量定义(gcc -Wshadow 会告诉您这件事)。

您显示的代码均未定义外部变量。

可能,您需要将 loadGame() 中显示的两行移到函数之外;这将解决 eventmap 缺少引用的问题。

问题标题提到了 SDL_FreeSurface 但问题的其余部分没有提到。我会大胆猜测,但也许您需要在 -lSDL 之前而不是之后链接 -lSDL_image

关于c - 对 SDL_Freesurface 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28121968/

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