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

#c #curve-fitting #gsl #dyld

#c #подгонка кривой #gsl #dyld

Вопрос:

Я пытаюсь использовать GSL для подгонки по методу наименьших квадратов, но я даже не могу заставить пример работать должным образом. Он компилируется, но при запуске программы выдает ошибку

dyld: lazy symbol binding failed: Symbol not found: _cblas_dnrm2

Referenced from: /usr/local/lib/libgsl.0.dylib

Expected in: dynamic lookup

Я полагаю, что я сузил проблему до строки

gsl_multifit_fdfsolver_set (s, amp;f, amp;x.vector);

но я не имею ни малейшего понятия, почему.

Я запускаю его на OSX с GSL 1.15 (хотя изначально я установил неправильную версию, 1.9). Я компилирую его в терминале, используя: gcc unchanged_example.c -o examplefitter -lgsl -lm

РЕДАКТИРОВАТЬ: решение было найдено здесь. добавление ‘ -lgslcblas ‘ при компиляции все уладило

Ответ №1:

Для всех, кто сталкивается с этим, вам нужно связать две библиотеки…

 gcc -Wall -O3 -g -lgslcblas -lgsl -std=c11 -pedantic-errors
  

Ответ №2:

Вам нужно найти общую библиотеку, которая содержит _cblas_dnrm2 и связать ее с вашим приложением.

Комментарии:

1. Спасибо за быстрый ответ. Итак, где мне найти эту библиотеку. Просто поиск в finder, кажется, он не существует? Это, вероятно, очень просто, но когда я найду его, как точно я буду его связывать? извините за мое невежество, я ценю вашу помощь.

2. Я бы предположил, что это часть вашей загрузки GSL, но вы неправильно указали путь ссылки на свою библиотеку. Прошло слишком много времени с тех пор, как я в последний раз программировал на C, чтобы помнить, но я думаю, что это связано с заданным вами путем -lm.

3. хм. Я думаю, что, возможно, я немного не в своей тарелке. Честно говоря, я действительно не знаю, что означает ‘-lm’, я просто добавил его, потому что где-то видел рекомендацию сделать это. хотя то же самое происходит с ним или без него. Чего я должен ожидать от ‘_cblas_dnrm2’? Должен ли где-нибудь быть файл с таким именем? Я получил другие функции gsl для работы при компиляции таким образом, есть идеи, почему эта конкретная библиотека не будет правильно связываться?

4. Лучше покопайтесь и разберитесь в этом. Прошло слишком много времени, чтобы я мог дать вам много практических советов. Но для вашего приложения требуется связать несколько библиотек. Ваша задача — найти их и сообщить вашему приложению, как их связать.