Невозможно скомпилировать пример кода в libpca - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь установить пакет libpca . У меня уже есть настроенный броненосец.

Пакет libpca разархивирован до /my/dir/. И я установил CPLUS_INCLUDE_PATH и другие переменные в место, где установлен Armadillo. (export CPLUS_INCLUDE_PATH=/my/dir/arma_install/include/:$CPLUS_INCLUDE_PATH)

Я запускаю следующую команду для установки libpca:

/my/dir/libpca-1.3.3$  ./configure --prefix=/my/dir/libpca-1.3.3
/my/dir/libpca-1.3.3$  make

с предупреждениями, но без ошибок. И команда:

/my/dir/libpca-1.3.3$  make install prefix=/my/dir/libpca-1.3.3

Кажется, это хорошо, и об ошибках не сообщается.

Затем я пытаюсь скомпилировать и запустить файл примера в /my/dir/libpca-1.3.3/examples/simple/pca_example.cpp. В директории examples я бегу

/my/dir/libpca-1.3.3/examples$  make

Возвращает

make [1]: ничего не поделаешь для «всех»

make [1]: Ничего не поделаешь для 'all-am'

И новый файл не создается. Затем я перехожу на examples/simple и запускаю

/my/dir/libpca-1.3.3/examples/simple$  make

Возвращает:

make: ничего не поделаешь для «всех»

И новый файл не создается. Тогда я бегу

/my/dir/libpca-1.3.3/examples/simple$  make check

Возвращает следующие ошибки:

Переменные wrapper_dsyev_, wrapper_dgemv_, wrapper_dgemm_ и т. Д. В приведенных выше ошибках существуют в следующих двоичных файлах:

/my/dir/arma_install/lib64/libarmadillo.so.8.500.0
/my/dir/arma_downloaded/CMakeFiles/armadillo.dir/src/wrapper.cpp.o
/my/dir/arma_downloaded/CMakeFiles/CMakeRelink.dir/libarmadillo.so.8.500.0

После того, как я export переведу их в LD_LIBRARY_PATH, все равно будут возвращены те же ошибки.

Я думаю, что что-то не так с путём включения и переменными среды. Как мне это решить?

Кроме того, если мне нужно написать код в /my/dir/working_dir/, как я могу установить путь?

---------------------------------- Отредактировано ниже ----------- ---------

Когда я сделал обновление, описанное ниже, на шаге 3:

/my/dir/libpca-1.3.3$ LD_LIBRARY_PATH=/my/dir/arma_install/lib64 make check

Возвращает следующие ошибки:

LD_LIBRARY_PATH = / my / dir / arma_install / lib64 / make check

Проверка в src / lib

make [1]: вход в каталог `/my/dir/libpca-1.3.3/src/lib'

make [1]: выход из каталога `/my/dir/libpca-1.3.3/src/lib'

Проверка в тесте

make [1]: вход в каталог `/my/dir/libpca-1.3.3/test'

make unittest

make [2]: вход в каталог `/my/dir/libpca-1.3.3/test'

/ bin / sh ../libtool --tag = CXX --mode = ссылка g ++ -I ../ src / lib
-pthread -O2 -o unittest main.o testcases.o test_pca.o test_utils.o ../src/lib/.libs/libpca.a -L / my / dir / source_scripts / lib64

libtool: ссылка: g ++ -I ../ src / lib -pthread -O2 -o unittest main.o testcases.o test_pca.o test_utils.o ../src/lib/.libs/libpca.a -L / my / dir / arma_install / lib64 -pthread

test_utils.o: В функции `void arma :: glue_times :: apply, arma :: Mat

(arma :: Mat &, arma :: Mat const &, arma :: Mat const &, double) ':

.

test_utils.cpp :( text.hot._ZN4arma10glue_times5applyIdLb1ELb0ELb1ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _ [_ ZN4arma10glue_times5applyIdLb1ELb0ELb1ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _] + 0x169): неопределенная ссылка на `wrapper_dgemm _ '

.

test_utils.cpp :( text.hot._ZN4arma10glue_times5applyIdLb1ELb0ELb1ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _ [_ ZN4arma10glue_times5applyIdLb1ELb0ELb1ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _] + 0x363): неопределенная ссылка на `wrapper_dgemv _ '

test_utils.cpp :( text.hot._ZN4arma10glue_times5applyIdLb1ELb0ELb1ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _ [_ ZN4arma10glue_times5applyIdLb1ELb0ELb1ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _] + 0x45c).: неопределенная ссылка на `wrapper_dsyrk _ '

.. / src / lib / .libs / libpca.a (pca.o): в функции `статистика :: PCA :: bootstrap_eigenvalues ​​_ ():

pca.cpp :(. Text + 0x454d): неопределенная ссылка на `wrapper_dsyev _ '

pca.cpp :(. Text + 0x4953): неопределенная ссылка на `wrapper_dsyevd _ '

.. / src / lib / .libs / libpca.a (pca.o): в функции `bool арма :: auxlib :: eig_sym_dc

(arma :: Col &, arma :: Mat &, arma :: Base> const &) ':

pca.cpp :( text._ZN4arma6auxlib10eig_sym_dcIdNS_3MatIdEEEEbRNS_3ColIT_EERNS2_IS5_EERKNS_4BaseIS5_T0_EE [_ZN4arma6auxlib10eig_sym_dcIdNS_3MatIdEEEEbRNS_3ColIT_EERNS2_IS5_EERKNS_4BaseIS5_T0_EE] + 0x13a).: неопределенная ссылка на `wrapper_dsyevd _ '

.. / src / lib / .libs / libpca.a (pca.o): в функции `bool арма :: eig_sym

(arma :: Col :: pod_type> &, arma :: Mat :: elem_type> &, arma :: Base :: elem_type, arma :: Mat> const &, char const *, арма :: arma_blas_type_only :: elem_type> :: результат сопз *) ':

pca.cpp :( text._ZN4arma7eig_symINS_3MatIdEEEEbRNS_3ColINT_8pod_typeEEERNS1_INS4_9elem_typeEEERKNS_4BaseIS8_S4_EEPKcPKNS_19arma_blas_type_onlyIS8_E6resultE [_ZN4arma7eig_symINS_3MatIdEEEEbRNS_3ColINT_8pod_typeEEERNS1_INS4_9elem_typeEEERKNS_4BaseIS8_S4_EEPKcPKNS_19arma_blas_type_onlyIS8_E6resultE] + 0x1a0).: неопределенная ссылка на `wrapper_dsyev _ '

.. / src / lib / .libs / libpca.a (pca.o): в функции `double arma :: auxlib :: det_lapack (arma :: Mat const &, bool) ':

pca.cpp :( text._ZN4arma6auxlib10det_lapackIdEET_RKNS_3MatIS2_EEb [_ZN4arma6auxlib10det_lapackIdEET_RKNS_3MatIS2_EEb] + 0x117).: неопределенная ссылка на `wrapper_dgetrf _ '

.. / src / lib / .libs / libpca.a (pca.o): В функции `void arma :: gemv :: apply_blas_type> (double *, arma :: Mat const &, double const *, double, double) ':

.

pca.cpp :( text._ZN4arma4gemvILb1ELb0ELb0EE15apply_blas_typeIdNS_3MatIdEEEEvPT_RKT0_PKS5_S5_S5 _ [_ ZN4arma4gemvILb1ELb0ELb0EE15apply_blas_typeIdNS_3MatIdEEEEvPT_RKT0_PKS5_S5_S5 _] + 0x86): неопределенная ссылка на `wrapper_dgemv _ '

.. / src / lib / .libs / libpca.a (pca.o): В функции `void arma :: gemv :: apply_blas_type> (double *, arma :: Mat const &, double const *, double, double) ':

.

pca.cpp :( text._ZN4arma4gemvILb0ELb0ELb0EE15apply_blas_typeIdNS_3MatIdEEEEvPT_RKT0_PKS5_S5_S5 _ [_ ZN4arma4gemvILb0ELb0ELb0EE15apply_blas_typeIdNS_3MatIdEEEEvPT_RKT0_PKS5_S5_S5 _] + 0x86): неопределенная ссылка на `wrapper_dgemv _ '

.. / src / lib / .libs / libpca.a (pca.o): в функции `void arma :: glue_times :: apply, arma :: Mat> (arma :: Mat &, arma :: Mat const &, arma :: Mat const &, double) ':

.

pca.cpp :( text.hot._ZN4arma10glue_times5applyIdLb0ELb0ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _ [_ ZN4arma10glue_times5applyIdLb0ELb0ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _] + 0x129): неопределенная ссылка на `wrapper_dgemm _ '

.

pca.cpp :( text.hot._ZN4arma10glue_times5applyIdLb0ELb0ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _ [_ ZN4arma10glue_times5applyIdLb0ELb0ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _] + 0x334): неопределенная ссылка на `wrapper_dgemv _ '

.. / src / lib / .libs / libpca.a (pca.o): в функции `void ARMA :: glue_times :: применяются, arma :: Mat> (arma :: Mat &, arma :: Mat const &, arma :: Mat const &, double) ':

pca.cpp :( text.hot._ZN4arma10glue_times5applyIdLb0ELb1ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _ [_ ZN4arma10glue_times5applyIdLb0ELb1ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _] + 0x14a).: неопределенная ссылка на `wrapper_dgemm _ '

pca.cpp :( text.hot._ZN4arma10glue_times5applyIdLb0ELb1ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _ [_ ZN4arma10glue_times5applyIdLb0ELb1ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _] + 0x33c).: неопределенная ссылка на `wrapper_dsyrk _ '

.. / src / lib / .libs / libpca.a (utils.o): в функции `stats :: utils :: compute_column_rms (arma :: Mat const &) ':

utils.cpp :(. Text + 0xe95): неопределенная ссылка на `wrapper_ddot _ '

.. / src / lib / .libs / libpca.a (utils.o): в функции `void ARMA :: glue_times :: применяются, arma :: Mat> (arma :: Mat &, arma :: Mat const &, arma :: Mat const &, double) ':

.

utils.cpp :( text.hot._ZN4arma10glue_times5applyIdLb1ELb0ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _ [_ ZN4arma10glue_times5applyIdLb1ELb0ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _] + 0x353): неопределенная ссылка на `wrapper_dgemm _ '

.

utils.cpp :( text.hot._ZN4arma10glue_times5applyIdLb1ELb0ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _ [_ ZN4arma10glue_times5applyIdLb1ELb0ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _] + 0x8a4): неопределенная ссылка на `wrapper_dgemv _ '

utils.cpp :( text.hot._ZN4arma10glue_times5applyIdLb1ELb0ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _ [_ ZN4arma10glue_times5applyIdLb1ELb0ELb0ENS_3MatIdEES3_EEvRNS2_IT_EERKT3_RKT4_S4 _] + 0x9ab).: неопределенная ссылка на `wrapper_dsyrk _ '

collect2: ошибка: ld вернул 1 состояние выхода

make [2]: *** [unittest] Ошибка 1

make [2]: выход из каталога `/my/dir/libpca-1.3.3/test'

make [1]: *** [check-am] Ошибка 2

make [1]: выход из каталога `/my/dir/libpca-1.3.3/test'

make: *** [check-recursive] Ошибка 1

Что мне делать дальше?

1 Ответ

0 голосов
/ 05 мая 2018

Вам нужно сообщить компоновщику о местонахождении вашей библиотеки броненосцев. Вы можете достичь этого двумя способами:

  1. Через переменную окружения: export LIBRARY_PATH=/arma/lib:$LIBRARY_PATH
  2. Передача armadillo include и пути к библиотеке для прямой настройки: ./configure --with-armadillo-incdir=/arma/include --with-armadillo-libdir=/arma/lib

Я бы порекомендовал использовать вариант 2, поскольку он предотвращает настройку дополнительных переменных среды, которые могут загрязнить вашу среду.

Обратите внимание, что --prefix обозначает каталог, в который устанавливается libpca. Это должно отличаться от исходного каталога!

После настройки вы можете запустить make, make check и make install. Для успешной работы make check загрузчик библиотеки linux должен знать местоположение общей библиотеки armadillo. Таким образом, один из вариантов заключается в следующем: LD_LIBRARY_PATH=/arma/lib make check

Для суммирования команд, которые вам нужно выполнить:

  1. ./configure --prefix=/libpca/install --with-armadillo-incdir=/arma/include --with-armadillo-libdir=/arma/lib
  2. make
  3. LD_LIBRARY_PATH=/arma/lib make check
  4. make install

Очевидно, вам необходимо скорректировать пути к вашей ситуации.

Предостережение: на некоторых платформах вам нужно явно связать с lapack и blas. Так что, если вы столкнетесь с дальнейшими ошибками компоновщика, попробуйте настроить так: LIBS='-llapack -lblas' ./configure --prefix=/libpca/install --with-armadillo-incdir=/arma/include --with-armadillo-libdir=/arma/lib

...