#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. Лучше покопайтесь и разберитесь в этом. Прошло слишком много времени, чтобы я мог дать вам много практических советов. Но для вашего приложения требуется связать несколько библиотек. Ваша задача — найти их и сообщить вашему приложению, как их связать.