对 SDL_Freesurface 的未定义引用
Undefined reference to SDL_Freesurface
我在编译我的程序时遇到了问题。
首先,这是我正在使用的 makefile:
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 个这样的错误。但都是因为一个全局变量。
我认为这是由于链接问题,但我不知道它是来自我的生成文件,还是我创建全局变量失败。为什么它告诉我 "undefined reference" ?
谢谢。
编辑:我运行 sdl-config --libs -> 输出:
-L/usr/lib/x86_64-linux-gnu -lSDL
在 main.h
中,您将 event
和 map
声明为全局变量。
在main.c
中,您将event
和map
定义为loadGame()
中的局部变量。这些隐藏了全局变量定义(gcc -Wshadow
会告诉你这件事)。
None 您显示的代码定义了外部变量。
可能,您需要将loadGame()
中显示的两行移到函数之外;这将解决 event
和 map
缺失的引用。
问题标题提到 SDL_FreeSurface
但问题的其余部分没有。我会做一个疯狂的猜测,但也许你需要 link -lSDL_image
在 -lSDL
之前而不是之后。
我在编译我的程序时遇到了问题。
首先,这是我正在使用的 makefile:
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 个这样的错误。但都是因为一个全局变量。
我认为这是由于链接问题,但我不知道它是来自我的生成文件,还是我创建全局变量失败。为什么它告诉我 "undefined reference" ? 谢谢。
编辑:我运行 sdl-config --libs -> 输出:
-L/usr/lib/x86_64-linux-gnu -lSDL
在 main.h
中,您将 event
和 map
声明为全局变量。
在main.c
中,您将event
和map
定义为loadGame()
中的局部变量。这些隐藏了全局变量定义(gcc -Wshadow
会告诉你这件事)。
None 您显示的代码定义了外部变量。
可能,您需要将loadGame()
中显示的两行移到函数之外;这将解决 event
和 map
缺失的引用。
问题标题提到 SDL_FreeSurface
但问题的其余部分没有。我会做一个疯狂的猜测,但也许你需要 link -lSDL_image
在 -lSDL
之前而不是之后。