Проблема с Makefile в Eclipse CDT - PullRequest
1 голос
/ 21 августа 2011

Когда я пытаюсь скомпилировать свою программу, я получаю следующее:

**** 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.

Что мне делать с этим? Я практически ничего не знаю о make-файле. Я видел потенциальный дубликат, который задавал те же вопросы, но использованные ответы предполагали, что пользователь действительно знает, как использовать make-файл. Если бы кто-нибудь мог указать мне правильное направление, это было бы очень здорово.

1 Ответ

1 голос
/ 21 августа 2011

Основная ошибка здесь на самом деле является последней: «неопределенная ссылка на« main ». Способ отчетности G ++, который не совсем лучший ...

Для запуска большинства типов приложений у вас должна быть функция «main» (типы, которые не работают таким образом, как встроенные приложения или приложения для смартфонов, будут иметь свои собственные инструкции о том, как сделать эквивалент где-нибудь). ). Файл, содержащий эту функцию, должен быть указан в make-файле. Если Eclipse управляет make-файлом, то файл, содержащий эту функцию, должен быть известен Eclipse.

В этом случае я вижу, что вы используете SDL (Simple DirectMedia Layer, подходящий для таких игр, как Space Invaders). Это один из типов приложений, который, как мне кажется, не имеет простого написанного пользователем основного. Вместо этого за сценой происходит какая-то магия низкого уровня, чтобы все настроить. Ошибка означает, что магия не работает, и как бы вы ее ни настраивали, не получается собрать целую систему.

Если вы не являетесь экспертом по Eclipse и C ++, вам понадобится учебник по правильной настройке в вашей конкретной среде. Попробуйте, например: http://davw.nfshost.com/c/sdl_eclipse.html

Я подозреваю, что соответствующий бит "В разделе Compiler-> Preprocessor добавьте определенный символ" main = SDL_main "".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...