Я пытался скомпилировать некоторый код, который позволит мне преобразовать gcode в x3g для моего 3D-принтера, но он бросает мне следующее, когда я пытаюсь запустить ' делать.'undefined ссылка на 'sqrt' при попытке использовать команду make
sudo make
[sudo] password for kipinaac:
cc -c -w getopt.c -o getopt.o
cc -c -w gpx.c -o gpx.o
cc -c -w gpx-main.c -o gpx-main.o
cc -lm getopt.o gpx.o gpx-main.o -o gpx
gpx.o: In function `magnitude':
gpx.c:(.text+0x1c1f): undefined reference to `sqrt'
gpx.o: In function `mm_to_steps':
gpx.c:(.text+0x224d): undefined reference to `round'
gpx.c:(.text+0x2274): undefined reference to `round'
gpx.c:(.text+0x229b): undefined reference to `round'
gpx.c:(.text+0x22ef): undefined reference to `round'
gpx.c:(.text+0x2353): undefined reference to `round'
gpx.o:gpx.c:(.text+0x2397): more undefined references to `round' follow
collect2: error: ld returned 1 exit status
make: *** [gpx] Error 1
Я проверил, что есть ссылка в пределах gpx.c тоже. Я понял, что это может быть связано с привязкой к другим потокам, но все они явно называют gcc, а не используют make. Кроме того, чтобы быть ясным, уже есть Makefile.
Библиотеки ('-lm') после объектных файлов. Переместите '-lm' до конца, и все будет в порядке. –
Я отредактировал Makefile, чтобы включить библиотеки после объектных файлов, и он скомпилирован правильно. Файл Makefile был предоставлен в Github, и было много видеороликов, показывающих успешные установки, поэтому что-то говорит мне, что он должен был работать без этого шага. Есть идеи? – akp234
Он работал только случайно - некоторые версии GCC и его компоновщик заметят содержимое библиотек, перечисленных перед любыми объектными файлами; другие (включая ваши) будут использовать библиотеку только в том случае, если она поставляет какие-либо символы, которые ей нужны, в момент их сканирования. Когда библиотека находится перед объектными файлами, она не удовлетворяет единственному символу, который ищет компоновщик - 'main' - поэтому он игнорируется как несущественный. Единственный безопасный способ работы - «библиотеки после объектных файлов». Это работает со статическими и разделяемыми библиотеками с обоими стилями компоновщика. –