Я столкнулся с ошибками в установке FDTD
программное обеспечение MEEP
на Ubuntu. Хотя я имею hdf5-tools
и libhdf5
установленный в моей системе (64-разрядная Ubuntu 14.04.1), make
шаг установки MEEP
возвращает ошибку как в этой ссылке paste.bin. Я настроил MEEP
со следующей командой:
./configure --with-mpi --with-hdf5=/usr/lib/x86_64-linux-gnu/ > configure.out
Я затем работал make
который закончился по ошибке, и я не мог работать make install
впоследствии. Не указывая --with-hdf5
отметьте сценарий конфигурации, используемый для возврата предупреждения следующим образом:
configure: WARNING: Couldn't find the HDF5 library!! Switching to ...
После установки многочисленных библиотек HDF5 была волшебно разрешена проблема; однако, это все еще присутствовало, когда я использовал флаг --with-hdf5=/usr/lib/x86_64-linux-gnu/
. Но без флага все установленное безупречно (я протестировал программу впоследствии и подтвердил, что это работало как ожидалось.) кроме GNU Научная связь Библиотеки. Мои вопросы следующие:
locate hdf5
в случае HDF5 и нахождения пути файлов, заканчивающихся .so
, .a
достаточно?environmental variables
LDFLAGS, CPPFLAGS и LD_LIBRARY_PATH имеют какое-либо отношение к конфигурации и делают сценарии, распознающие эти библиотеки. Я думаю, что они имеют, так как они упоминаются в инструкциях по установке MEEP, и MEEP устанавливают учебное руководство. Я ценил бы его, если кто-то может объяснить, как они и переменная LIB связаны с процессами установки.Спасибо за то, что заняли время,
P.S.: При необходимости я могу предоставить дополнительные документы. Я не помещал сценарий конфигурации и т.д., так как я не знаю, какой автоматически сгенерирован и который не (то же идет для make
).
Отвечать на этот вопрос хорошо действительно требует полного понимания GNU autotools
, который я не имею: тем не менее, я надеюсь, что эти комментарии помогут.
Настраивать сценарий для конкретной сборки сгенерирован от ее configure.ac использования файла autoconf
. В свою очередь configure.ac использует стандартные макросы для тестирования на присутствие указанных компонентов. В данном случае configure.ac указывает тест AC_CHECK_LIB для библиотеки GSL как
AC_CHECK_LIB(gsl, gsl_sf_bessel_Jn, [],
[AC_MSG_WARN([Missing GNU GSL library...Bessel-function field initialization will not be supported.])])
AC_CHECK_LIB (library, function, [action-if-found], [action-if-not-found], [other-libraries])
и фактический механизм, которым выполнена проверка, путем создания минимальной тестовой программы (conftest
) для указанной функции gsl_sf_bessel_Jn
в библиотеке libgsl
, и попытка связать его с помощью инструментов сборки по умолчанию. Такая минимальная программа могла бы посмотреть что-то как
char gsl_sf_bessel_Jn();
int main() { return gsl_sf_bessel_Jn(); return 0; }
Обратите внимание что фиктивный прототип char gsl_sf_bessel_Jn()
не может перенести отношение к типу возврата или списку аргументов фактической функции - мы никогда не пытаемся запустить программу, мы просто хотим знать, связывается ли это (т.е. может ли компоновщик разрешить справочные руководства по библиотеке). Мы видим, как это работает, если мы создаем такой исходный файл сами:
$ cat > conftest.c
char gsl_sf_bessel_Jn();
int main() { return gsl_sf_bessel_Jn(); return 0; }
Ctrl+D
Как ожидалось, если мы пытаемся выполнить его, не связывая библиотеку GSL, мы получаем ошибку
$ gcc conftest.c
/tmp/ccWqFraS.o: In function `main':
conftest.c:(.text+0xa): undefined reference to `gsl_sf_bessel_Jn'
collect2: error: ld returned 1 exit status
Однако, даже если мы явно связываемся libgsl
мы находим
$ gcc conftest.c -lgsl
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgsl.so: undefined reference to `cblas_dasum'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgsl.so: undefined reference to `cblas_sger'
.
<snip>
.
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libgsl.so: undefined reference to `cblas_zdotu_sub'
collect2: error: ld returned 1 exit status
На данном этапе важно отметить, что настраивать сценарий не знает, почему конкретный тест перестал работать, только что это имеет. В этом случае это перестало работать, потому что мы не связали подчиненного libgslcblas
библиотека.
Это иллюстрирует важность порядка, в котором выполняются тесты: каждый успешный тест заставляет недавно обнаруженную библиотеку быть добавленной к $LIB
переменная для последующих тестов. Конкретно (как отмечено в документации GSL)
Важно проверить на libm и libgslcblas прежде libgsl, иначе тесты перестанут работать. Принятие библиотек найдено, вывод во время настраивать этапа похож на это,
checking for cos in -lm... yes checking for cblas_dgemm in -lgslcblas... yes checking for gsl_blas_dgemm in -lgsl... yes
Если библиотека будет найдена затем, то тесты определят макросы HAVE_LIBGSL, HAVE_LIBGSLCBLAS, HAVE_LIBM и добавят, что опции-lgsl-lgslcblas-lm к переменной ОСВОБОЖДАЮТ.
meep исходный пакет действительно проверяет на libgslcblas прежде libgsl, однако определенная проверка, которую он делает, является AC_CHECK_FUNC, а не AC_CHECK_LIB
AC_CHECK_FUNC(cblas_cgemm, [], [AC_CHECK_LIB(gslcblas, cblas_cgemm)])
В то время как поверхностно подобный, кажется, что AC_CHECK_FUNC не добавляет библиотеку к $LIBS
на успехе; кажется, что мы можем работать вокруг этого просто путем добавления явного AC_CHECK_LIB для libgslcblas в configure.ac файле
# GNU Scientific Library
AC_CHECK_FUNC(cblas_cgemm, [], [AC_CHECK_LIB(gslcblas, cblas_cgemm)])
AC_CHECK_LIB([gslcblas],[cblas_cgemm])
AC_CHECK_LIB(gsl, gsl_sf_bessel_Jn, [],
[AC_MSG_WARN([Missing GNU GSL library...Bessel-function field initialization will not be supported.])])
и затем выполнение autoconf
повторно создавать настраивать сценарий
$ autoconf
после которого выполнения ./configure
отчеты, что библиотека GSL действительно найдена:
$ ./configure --prefix=/usr/local | grep gsl
configure: WARNING: Cannot find latex2html in your path!
configure: WARNING: FFTW needed for MPB
checking for cblas_cgemm in -lgslcblas... yes
checking for gsl_sf_bessel_Jn in -lgsl... yes
склонный - добираются, устанавливают пакеты от http://packages.ubuntu.com/ репозиторий. Кэш Ubuntu все метаданные пакетов в компьютере. Можно искать пакеты с помощью следующей команды.
sudo apt-cache search "package keyword"
ищут библиотеку HDF5 в хранилище пакетов человечности.
sudo apt-cache search "hdf5"
команда покажет пакеты, касающиеся hdf5.
устанавливают соответствующий пакет на Вас.
sudo apt-get install package-name.
главным образом необходимо установить hdf5-инструменты, h5utils, таблицы Python.