2013-07-17 2 views
2

У меня есть ошибка делает проект кода из-за того, что я считаю, недостающая рутина из LAPACK:Linux с использованием библиотеки LaPack

HomographyInit.cc:(.text+0x385): undefined reference to `dgesvd_' 

Я думаю, что нужно добавить LaPack библиотеки как-то мой Makefile. Вот часть моего Makefile:

CC = g++ 
COMPILEFLAGS = -I MY_CUSTOM_INCLUDE_PATH -D_LINUX -D_REENTRANT -Wall -O3 -march=nocona -msse3 
LINKFLAGS = -L MY_CUSTOM_LINK_PATH -lGVars3 -lcvd 

Я попытался сделать следующее к чему не привели:

CC = g++ 
COMPILEFLAGS = -I MY_CUSTOM_INCLUDE_PATH -D_LINUX -D_REENTRANT -Wall -O3 -march=nocona -msse3 
LINKFLAGS = -L MY_CUSTOM_LINK_PATH -lGVars3 -lcvd **-llapack** 

Результат:

make 
... 
/usr/bin/ld: cannot find -llapack 
collect2: ld returned 1 exit status 

Как я могу добавить LAPACK в мой проект? Я уверен, что правильно установил его, хотя хотел бы как-то дважды проверить это.

ответ

4

Похоже, что liblapack не находится на пути, который может найти. Я бы предложил две вещи:

  1. Установить символическую ссылку вручную. Возможно (и иногда распространено), что ld не может распознать liblapack.so.3gf или liblapack.so.3.0.1 или около того - это по существу liblapack.so. Вы можете установить ссылку на ln -s liblapack.so.3gf liblapack.so
  2. Установите пакет liblapack-dev, если вы используете репозитории ubuntu или debian. По некоторым неясным причинам liblapack3gf - это не то же самое, что и liblapack-dev. Я не уверен, что в любом случае оба будут делать или не делать то же самое.

Я думаю, что первый элемент должен быть в состоянии решить вашу проблему (надеюсь).

1

На моем компьютере динамическая библиотека находится в /usr/lib64/liblapack.so.3.4.1 и содержит требуемый символ:

$ nm -D /usr/lib64/liblapack.so.3.4.1 | grep dgesvd 
0000000000189200 T dgesvd_ 

Так что я бы предположил, что место, где установлен ваш LAPACK является а не в пути поиска компоновщика. Вы должны добавить флаг -L/path/to/the/lapackdir в LINKFLAGS

+0

Хмм, у меня даже нет папки/usr/lib64/(хотя я на 64-битной машине). Я ищу liblapack.so прямо сейчас. – JDS

+0

У меня: /usr/lib/liblapack.so.3gf. Должен ли я помещать это в Makefile каким-то образом? – JDS

+0

Странно! Это работает, если вы добавите '' -L/usr/lib''? – hivert

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