como executar um arquivo C e vários arquivos associados a ele (makefile, .h, .c)?

0

Eu tenho que fazer um programa C para resolver hungarian method para problema de atribuição. Então baixei uma referência da web, tendo ( makefile,test.c,hungarian.c,hangarian.h,readme , ) , Agora eu corro com sucesso test.c por $ make test , mas estou tendo problemas para executar hangarian.c , quando tentei compilar isso no meu terminal eu consegui ::

anupam@JAZZ:~/Downloads/hungarian$ make hungarian
gcc -L. -lhungarian  hungarian.o   -o hungarian
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/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 11
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 21
/usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_line): relocation 0 has invalid symbol index 2
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: In function '_start':
(.text+0x20): undefined reference to 'main'
collect2: error: ld returned 1 exit status
make: *** [hungarian] Error 1

Eu não estou entendendo o que esse erro significa ??

    
por lazarus 17.09.2014 / 20:48

1 resposta

2

Meu Google-fu encontrou os arquivos de origem que você está tentando compilar:

link

e, em particular:

link

Simplesmente executando make você pode criar all as coisas que precisam ser compiladas ( make hungarian é o comando errado).

Saída de make process:

gcc -O3 -Wall -I. -c hungarian.c
hungarian.c: In function ‘hungarian_routine_two’:
hungarian.c:432:14: warning: variable ‘newsum’ set but not used [-Wunused-but-set-variable]
   int oldsum,newsum;
              ^
gcc -O3 -Wall -I.   -c -o makeprob.o makeprob.c
ar cr libhungarian.a hungarian.o makeprob.o
gcc -O3 -Wall -I. -o test test.c -L. -lhungarian
gcc -O3 -Wall -I. -o timetest timetest.c -L. -lhungarian -lm

Agora você tem dois arquivos executáveis ( test e timetest ) e um arquivo de biblioteca estática ( libhungarian.a ).

Para executar os programas de teste:

./test

./runtest

Se você quer escrever um programa que usa esta biblioteca, você precisa #include "hungarian.h" no seu arquivo myprogram.c e compilá-lo com um comando similar aos dos programas de teste:

gcc -O3 -Wall -I. -o myprogram myprogram.c -L. -lhungarian

Sugiro que você faça uma cópia de test.c ( cp test.c myprogram.c ) e modifique-a para atender às suas necessidades.

Como você pode ver, há alguma mágica acontecendo aqui: man páginas de make e gcc devem lançar alguns raios de luz sobre ela.

    
por Vanni Totaro 17.09.2014 / 22:57