我最近从http://www.agidev.com/dl_files/agil-0.1.5.tar.gz下载了AGIL冒险游戏解释器
这是一个C程序,运行像国王的追求老塞拉利昂冒险游戏。
我正在尝试编译源代码,以便我可以debugging它并了解它是如何工作的。
然而,尽pipe我尽了最大的努力,GCC编译器从来没有看到主要的方法,尽pipe它的存在。
这里是编译器输出:
make linsdl all make -fMakefile.sdl make[1]: Entering directory `/home/alay/Downloads/AGIL/agil' gcc -O -Wall -Isrc/include -I/usr/local/include -DTARGET_SDL -fstrength-reduce -fomit-frame-pointer -pedantic -I/usr/local/include/SDL -Dmain=SDL_main -c src/main.c -o bin/main.o gcc -O -Wall -Isrc/include -I/usr/local/include -DTARGET_SDL -fstrength-reduce -fomit-frame-pointer -pedantic -I/usr/local/include/SDL -Dmain=SDL_main -c src/drivers/sdl.c -o bin/driver.o gcc -L/usr/local/lib bin/main.o bin/general.o bin/event.o bin/graphics.o bin/menu.o bin/text.o bin/resource.o bin/gameid.o bin/pic_op.o bin/picture.o bin/lzw.o bin/vm.o bin/actionop.o bin/testop.o bin/status.o bin/object.o bin/view.o bin/check.o bin/save.o bin/message.o bin/sound.o bin/decomp.o bin/driver.o \ -o bin/agil -lm -lSDLmain -lSDL -lpthread /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start': make[1]: Leaving directory `/home/alay/Downloads/AGIL/agil' (.text+0x20): undefined reference to `main' collect2: ld returned 1 exit status make[1]: *** [all] Error 1 make: *** [linsdl] Error 2
我所做的唯一更改是更改包含语句,以便编译器可以findSDL库。 例如我改变了: #include "SDL.h"
到#include "SDL/SDL.h"
。
我的目标是理解C代码,以便在另一个平台上构build类似的东西。
-Dmain=SDL_main
相当于在代码中有一个#define main SDL_main
。 预处理器将用SDL_main替换主,并且链接器将不会找到它(因为它不存在)。
运行gcc -E ...
并查看代码在预处理器运行之后的样子,但在编译器运行之前。
LE:是的。 但是我不会把它作为参数传给gcc(并且改变头文件)。 但是它包含在后面的定义。
另外运行一个locate libsdl并检查你是否正确地将路径传递给链接器。