2013-08-01 3 views
0

Я пытаюсь скомпилировать реализацию кратчайшего пути (код: http://www.dis.uniroma1.it/challenge9/code/ch9-1.1.tar.gz). Однако я получаю ошибки:Ошибки компоновщика на C++

[email protected]:~/Desktop/code/ch9-1.1$ make 
cd ./gens; make 
make[1]: Entering directory `/home/le/Desktop/code/ch9-1.1/gens' 
cd ./grid; make 
make[2]: Entering directory `/home/le/Desktop/code/ch9-1.1/gens/grid' 
gcc -O6 -DNDEBUG -DPERMUTE_NODES -I ../../lib -I ../../lib/ll-core/include -o spgrid.exe spgrid.c -lm   -I../../lib/ ../../lib/ll-core/src/*.c 
../../lib/ll-core/src/LConnectivity.c: In function ‘_visitaDSFRicorsiva’: 
../../lib/ll-core/src/LConnectivity.c:114:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘ui4’ [-Wformat] 
../../lib/ll-core/src/LFile_posix.c: In function ‘LFile_GetTempName’: 
../../lib/ll-core/src/LFile_posix.c:171:11: warning: ignoring return value of ‘tmpnam’, declared with attribute warn_unused_result [-Wunused-result] 
../../lib/ll-core/src/LSystem.c: In function ‘LSystem_GetString’: 
../../lib/ll-core/src/LSystem.c:47:10: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result] 
/tmp/ccGnQJPS.o: In function `LArray_ResizeBy': 
LArray.c:(.text+0x354): undefined reference to `log' 
LArray.c:(.text+0x38e): undefined reference to `pow' 
LArray.c:(.text+0x402): undefined reference to `log' 
LArray.c:(.text+0x43c): undefined reference to `pow' 
/tmp/ccVDr0iU.o: In function `LGraphUtil_RandomUNM': 
LGraphUtil.c:(.text+0x988): undefined reference to `sqrt' 
LGraphUtil.c:(.text+0x997): undefined reference to `sqrt' 
LGraphUtil.c:(.text+0x9a6): undefined reference to `sqrt' 
collect2: ld returned 1 exit status 
make[2]: *** [spgrid.exe] Error 1 
make[2]: Leaving directory `/home/le/Desktop/code/ch9-1.1/gens/grid' 
make[1]: *** [all] Error 2 
make[1]: Leaving directory `/home/le/Desktop/code/ch9-1.1/gens' 
make: *** [code] Error 2 
+3

@Etienne Большое спасибо. – StephenTG

+0

Вам не хватает части для математической библиотеки где-нибудь. 'log'' pow' и 'sqrt' не могут быть найдены. Найдите файл, в котором эти функции определены, и убедитесь, что они находятся в правильном каталоге или вы включили этот каталог. – Shaz

+1

Это ошибки компоновщика с математикой lib. Попробуйте добавить «-lm» в командную строку последней команды gcc. – JoshG79

ответ

0

Редактировать Makefile для изменения положения -lm. Поместите -lm в конце командной строки, потому что в зависимости от gcc/binutils порядок имеет значение *.

[1] Библиотеки, возможно, должны появиться после объектов, которые в них нуждаются.

+1

Действительно, командная строка заканчивается подстановочным знаком, скомпилировавшим кучу других файлов * .c. – DanielKO

+0

Спасибо. Пожалуйста, скажите более подробную информацию. Существует не только один Makefile – Sunny

+0

. Я вижу, что есть Makefile в/gen,/gen/grid,/gen/tor, ... – Sunny

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