2014-12-02 4 views
0

Я пытаюсь написать makefile для компиляции нескольких файлов, которые зависят друг от друга. Структура файла выглядит следующим образом:Ошибки перемещения метаданных Makefile

- ext2.h 
- ext_helper.c 
- ext2_cp.c 
- ext2_ln.c 
- ext2_mkdir.c 
- ext2_rm 

Каждый из исходных файлов зависит от файла в ext2.h заголовка. Последние четыре файла независимы друг от друга, но зависят от ext2_helper.c для некоторых вспомогательных функций.

Я попытался написать Makefile для этой ситуации следующим образом:

ext2_cp : ext2_helper.o 
    gcc -Wall -g -o ext2_cp $^ 

ext2_mkdir : ext2_helper.o 
    gcc -Wall -g -o ext2_mkdir $^ 

ext2_ln : ext2_helper.o 
    gcc -Wall -g -o ext2_ln $^ 

ext2_rm : ext2_helper.o 
    gcc -Wall -g -o ext2_rm $^ 

%.o : %.c ext2.h 
    gcc -Wall -g -c $< 

clean : 
    rm *.o ext2_cp ext2_mkdir ext2_ln ext2_rm 

Однако на выполнение этого Makefile, я получаю несколько переезда erros следующим образом:

make 
gcc -Wall -g -c ext2_helper.c 
gcc -Wall -g -o ext2_cp ext2_helper.o 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 10 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 11 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 10 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 12 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 12 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 12 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 2 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 2 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 11 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 12 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 12 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 12 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 12 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 12 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 12 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 12 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 12 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 12 
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 20 has invalid symbol index 19 
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start': 
(.text+0x20): undefined reference to `main' 
collect2: ld returned 1 exit status 
make: *** [ext2_cp] Error 1 

Я посмотрел на некоторые другие сообщения с той же проблемой, но не совсем понял причину ошибки. Как я могу это исправить?

+0

'Makefile: 2: *** отсутствует разделитель. Stop.' – User

ответ

1

В сообщении об ошибке говорится все: вы пытаетесь создать исполняемые файлы без main(). Кажется, что вы забыли что-то в своем списке зависимостей.

Попробуйте это:

ext2_cp: ext2_cp.o ext2_helper.o 
    gcc -Wall -g -o ext2_cp $^ 

ext2_mkdir: ext2_mkdir.o ext2_helper.o 
    gcc -Wall -g -o ext2_mkdir $^ 

ext2_ln: ext2_ln.o ext2_helper.o 
    gcc -Wall -g -o ext2_ln $^ 

ext2_rm: ext2_rm.o ext2_helper.o 
    gcc -Wall -g -o ext2_rm $^ 

%.o: %.c ext2.h 
    gcc -Wall -g -c $< 

clean: 
    rm *.o ext2_cp ext2_mkdir ext2_ln ext2_rm 
+1

@mCode Эта ошибка разделителя означает, что вы забыли исправить пробелы на вкладках, когда вы использовали этот ответ. –

+1

Вы не можете просто скопировать/перейти сюда в Makefile, отступы должны иметь символ '[tab]' (каждая вторая строка: те, которые начинаются с 'gcc' и' rm', должны быть вкладкой, а не просто пробелы). – xbug

+1

Спасибо вам всем! – n0shadow

Смежные вопросы