неопределенная ссылка на sqrt в SVM-Struct (использовали -lm)

Joxixi

Собственно, я работаю с известным проектом SVM-struct ( http://www.cs.cornell.edu/people/tj/svm_light/svm_struct.html ) на Ubuntu 16.04. Я выполнил инструкции в http://www.cs.cornell.edu/people/tj/svm_light/svm_multiclass.html, чтобы использовать SVM-мультикласс, загрузил исходный код и make. Но при сборке проекта я обнаружил несколько ошибок:

$ make
cd svm_light; make svm_learn_hideo_noexe
make[1]: Entering directory '/home/parallels/CLionProjects/svm_multiclass/svm_light'
make[1]: Nothing to be done for 'svm_learn_hideo_noexe'.
make[1]: Leaving directory '/home/parallels/CLionProjects/svm_multiclass/svm_light'
cd svm_struct; make svm_struct_noexe
make[1]: Entering directory '/home/parallels/CLionProjects/svm_multiclass/svm_struct'
make[1]: Nothing to be done for 'svm_struct_noexe'.
make[1]: Leaving directory '/home/parallels/CLionProjects/svm_multiclass/svm_struct'
gcc  -O3 -lm -Wall svm_struct/svm_struct_learn.o svm_struct_learn_custom.o svm_struct_api.o svm_light/svm_hideo.o svm_light/svm_learn.o svm_light/svm_common.o svm_struct/svm_struct_common.o svm_struct/svm_struct_main.o -o svm_multiclass_learn 
svm_light/svm_learn.o: In function `estimate_sphere':
svm_learn.c:(.text+0x6e88): undefined reference to `sqrt'
svm_light/svm_learn.o: In function `estimate_r_delta':
svm_learn.c:(.text+0x7053): undefined reference to `sqrt'
svm_light/svm_learn.o: In function `estimate_r_delta_average':
svm_learn.c:(.text+0x7b04): undefined reference to `sqrt'
svm_light/svm_learn.o: In function `length_of_longest_document_vector':
svm_learn.c:(.text+0x7b86): undefined reference to `sqrt'
svm_light/svm_learn.o: In function `incorporate_unlabeled_examples':
svm_learn.c:(.text+0x89eb): undefined reference to `sqrt'
svm_light/svm_learn.o:svm_learn.c:(.text+0xc952): more undefined references to `sqrt' follow
svm_light/svm_common.o: In function `classify_example':
svm_common.c:(.text+0x38f): undefined reference to `tanh'
svm_common.c:(.text+0x42d): undefined reference to `exp'
svm_common.c:(.text+0x4a7): undefined reference to `pow'
svm_light/svm_common.o: In function `kernel':
svm_common.c:(.text+0x870): undefined reference to `tanh'
svm_common.c:(.text+0x90d): undefined reference to `exp'
svm_common.c:(.text+0x988): undefined reference to `pow'
svm_light/svm_common.o: In function `model_length_s':
svm_common.c:(.text+0x2c8d): undefined reference to `sqrt'
svm_light/svm_common.o: In function `model_length_n':
svm_common.c:(.text+0x2f5c): undefined reference to `sqrt'
svm_light/svm_common.o: In function `cholesky_matrix':
svm_common.c:(.text+0x3c6f): undefined reference to `sqrt'
svm_light/svm_common.o: In function `find_indep_subset_of_matrix':
svm_common.c:(.text+0x3f41): undefined reference to `sqrt'
svm_light/svm_common.o: In function `single_kernel':
svm_common.c:(.text+0xc0c): undefined reference to `tanh'
svm_common.c:(.text+0xc84): undefined reference to `pow'
svm_common.c:(.text+0xcfb): undefined reference to `exp'
collect2: error: ld returned 1 exit status
Makefile:48: recipe for target 'svm_multiclass_learn' failed
make: *** [svm_multiclass_learn] Error 1

Думаю, Makefile уже включен -lm.

# Makefile for SVM-multiclass, 03.07.04

#Use the following to compile under unix or cygwin
CC = gcc
LD = gcc

#Call 'make' using the following line to make CYGWIN produce stand-alone Windows executables
#       make 'SFLAGS=-mno-cygwin'

CFLAGS =   $(SFLAGS) -O3 -fomit-frame-pointer -ffast-math -Wall
LDFLAGS =  $(SFLAGS) -O3 -lm -Wall
#CFLAGS =  $(SFLAGS) -pg -Wall
#LDFLAGS = $(SFLAGS) -pg -lm -Wall 

all: svm_multiclass_learn svm_multiclass_classify

.PHONY: clean
clean: svm_light_clean svm_struct_clean
    rm -f *.o *.tcov *.d core gmon.out *.stackdump 

#-----------------------#
#----   SVM-light   ----#
#-----------------------#
svm_light_hideo_noexe: 
    cd svm_light; make svm_learn_hideo_noexe

svm_light_clean: 
    cd svm_light; make clean

#----------------------#
#----  STRUCT SVM  ----#
#----------------------#

svm_struct_noexe: 
    cd svm_struct; make svm_struct_noexe

svm_struct_clean: 
    cd svm_struct; make clean

#-------------------------#
#----  SVM MULTICLASS ----#
#-------------------------#

svm_multiclass_classify: svm_light_hideo_noexe svm_struct_noexe svm_struct_api.o svm_struct/svm_struct_classify.o svm_struct/svm_struct_common.o svm_struct/svm_struct_main.o 
    $(LD) $(LDFLAGS) svm_struct_api.o svm_struct/svm_struct_classify.o svm_light/svm_common.o svm_struct/svm_struct_common.o -o svm_multiclass_classify $(LIBS)

svm_multiclass_learn: svm_light_hideo_noexe svm_struct_noexe svm_struct_api.o svm_struct_learn_custom.o svm_struct/svm_struct_learn.o svm_struct/svm_struct_common.o svm_struct/svm_struct_main.o
    $(LD) $(LDFLAGS) svm_struct/svm_struct_learn.o svm_struct_learn_custom.o svm_struct_api.o svm_light/svm_hideo.o svm_light/svm_learn.o svm_light/svm_common.o svm_struct/svm_struct_common.o svm_struct/svm_struct_main.o -o svm_multiclass_learn $(LIBS)


svm_struct_api.o: svm_struct_api.c svm_struct_api.h svm_struct_api_types.h svm_struct/svm_struct_common.h
    $(CC) -c $(CFLAGS) svm_struct_api.c -o svm_struct_api.o

svm_struct_learn_custom.o: svm_struct_learn_custom.c svm_struct_api.h svm_light/svm_common.h svm_struct_api_types.h svm_struct/svm_struct_common.h
    $(CC) -c $(CFLAGS) svm_struct_learn_custom.c -o svm_struct_learn_custom.o
кость

Компоновщик сначала собирает зависимости ( svm_light/svm_learn.o) и заполняет их, когда видит определение ( -lm).

Кажется, у вас уже есть $(LIBS)в конце вашего ldвызова, поэтому просто:

LIBS += -lm

должен это исправить.

Другие советы:

  • вы можете заменить узор cd X; make TARGETнаmake -C X TARGET
  • вы можете ссылаться на цель как на $@и первое предварительное условие в списке зависимостей как $<, поэтому ваше последнее правило можно записать как:
svm_struct_learn_custom.o: svm_struct_learn_custom.c svm_struct_api.h svm_light/svm_common.h svm_struct_api_types.h svm_struct/svm_struct_common.h
    $(CC) -c $(CFLAGS) $< -o $@

где рецепт переопределение встроенного рецепта для компиляции файлов .c, поэтому достаточно просто указать заголовки как (дополнительные) предварительные условия:

svm_struct_learn_custom.o: svm_struct_api.h svm_light/svm_common.h svm_struct_api_types.h svm_struct/svm_struct_common.h

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

C - неопределенная ссылка на "sqrt" даже с '-lm'

Необходимо использовать -lm в Clang с pow (), но не sqrt ()

Как избежать ошибки в математической области, когда у нас есть sqrt

Попытка заставить квадратный корень работать с указателями, но он никогда не выполняет часть sqrt и возвращает то же заданное число

Почему расчет sqrt занимает больше времени, чем вычисление пифагора?

Как может один sqrt () работать в два раза медленнее, чем когда он был помещен в цикл for

эластичный порядок поиска по результату функции (sqrt)

не найдено совпадений, перегруженных для функции sqrt

применение функции sqrt к фрейму данных

понимать поведение sqrt - давать разные результаты при написании разных

Почему функция sqrt не работает для значений, введенных пользователем?

Где ошибки в моей собственной функции sqrt ()?

Недопустимая операция с плавающей запятой с использованием SQRT ()

Нахождение sqrt числа

Как работает эта встроенная функция сборки приближения sqrt?

Эффективный с точки зрения памяти метод вычисления sqrt большой матрицы с отрицательными значениями

Обратный расчет sqrt ()

Реализуйте метод sqrt, используя приближенный подход. Невозможно выйти из цикла, даже если условие ложно

Нет соответствующей функции для вызова sqrt

Отображение sqrt при возврате функции

Как сохранить сводку (lm) в файл?

Как сформулировать фиктивную переменную периода времени в lm ()

Как передать формулы в объекты lm с весами?

Использование параметра функции и передача его в формулу lm

Как lm () узнает, какие предикторы категоричны?

Исправление устойчивых / кластеризованных стандартных ошибок в функции lm или замена результатов

Автоматизация создания переменных в наборе данных на основе спецификации lm

Предоставление подмножества для функции lm в другой функции

Построение графика прогнозируемых значений lm

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    Машинопись: перебор каждого члена между двумя классами и разность флагов в Angular

  3. 3

    Как разбить строку на несколько строк и сохранить пробелы в YAML?

  4. 4

    Проверьте, была ли новая вкладка открыта с помощью puppeteer

  5. 5

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  6. 6

    Элемент "эллипс", созданный с помощью JS, не отображается в HTML

  7. 7

    How do I search for an entry out of two SQL tables and know which table it came from?

  8. 8

    Сделать программу автоматически добавлять текстовые поля в java

  9. 9

    JavaFX TextArea как установить текст с автоматическим переносом новой строки

  10. 10

    Как я могу нарисовать заполненный прямоугольник в JFreeChart?

  11. 11

    Как добавить Swagger в веб-API с поддержкой OData, работающий на ASP.NET Core 3.1

  12. 12

    Merging legends in plotly subplot

  13. 13

    ViewPager2 мигает / перезагружается при смахивании

  14. 14

    что делать, если в коде нет объявления Tk ()

  15. 15

    YAML: ошибка при разборе строки, содержащей квадратную скобку в качестве первого символа

  16. 16

    Передача параметра msbuild в Build.proj

  17. 17

    Как фильтровать таблицу SQLite3 в PyQt5

  18. 18

    Как в точности работает внутренний пул потоков Nodejs?

  19. 19

    Нарушение ограничения внешнего ключа JPA не может вставить Null

  20. 20

    TypeError: store.getState não é uma função. (Em 'store.getState ()', 'store.getState' é indefinido, como posso resolver esse problema?

  21. 21

    Невозможно запустить iReports 5.6.0 с Netbeans 8 и JDK 1.8

популярныйтег

файл