当我尝试编译程序时,我得到以下内容:
**** Build of configuration Debug for project SpaceInvaders ****
make all
Building target: SpaceInvaders
Invoking: GCC C++ Linker
g++ -o "SpaceInvaders" ./src/SpaceInvaders.o -lSDLmain -lSDL
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 0 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 1 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 4 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 5 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 6 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 7 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 8 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 9 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 10 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 11 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 12 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 13 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 14 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 15 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 16 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 17 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 18 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 19 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 20 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 21 has invalid symbol index 14
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 22 has invalid symbol index 22
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [SpaceInvaders] Error 1
**** Build Finished ****
我认为主要问题建立在重定位说明符的基础上,该说明符指出重定位1 - 20在索引14,2,22,12和13处具有无效符号。
我该怎么办?我对makefile几乎一无所知。我看到一个潜在的副本,它询问了相同的问题,但调用的答案假定用户实际上知道如何使用makefile。如果有人能指出我正确的方向,那将是非常宏伟的。
答案 0 :(得分:1)
这里的潜在错误实际上是最后一个:'对'main'的未定义引用。 G ++的报道方式并不是最好的......
你需要有一个名为'main'的函数来启动大多数类型的应用程序(那些不起作用的类型,如嵌入式或智能手机应用程序,将有自己的指示如何在某处执行等效操作)。包含该函数的文件需要在makefile中列出。如果Eclipse正在管理makefile,那么Eclipse需要知道包含该函数的文件。
在这种情况下,我发现你正在使用SDL(Simple DirectMedia Layer,适用于Space Invaders等游戏)。这是我认为没有简单的用户编写的主要应用程序类型之一。相反,幕后会出现某种低级魔法来设置一切。这个错误意味着魔法失败了,无论你是在配置它,它都无法组合起来构建一个完整的系统。
如果您不是Eclipse和C ++的专家,那么您需要的是有关如何在特定环境中正确设置的教程。试试,例如: http://davw.nfshost.com/c/sdl_eclipse.html
我怀疑相关位是'在编译器 - >预处理器部分,添加定义的符号“main = SDL_main”'。