我正在尝试安装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
中编译并运行示例文件。在dir examples
中,我运行
/my/dir/libpca-1.3.3/examples$ make
返回
make [1]:没有什么可以做的'所有'
make [1]:没有什么可以做的,所有的'
并且没有创建新文件。然后我进入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 = link 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 / lib64libtool:link: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中 ARMA :: 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中 ARMA :: eig_sym
(arma :: Col :: pod_type>&,arma :: Mat :: elem_type>&, arma :: Base :: elem_type,arma :: Mat>常量和放大器;, char const *, ARMA :: 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&amp ;,, 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&amp ;,, 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&amp ;,, 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
接下来我该怎么做?
答案 0 :(得分:1)
您需要告诉链接器您的犰狳库的位置。您可以通过两种方式实现这一目标:
export LIBRARY_PATH=/arma/lib:$LIBRARY_PATH
./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
总结您需要运行的命令:
./configure --prefix=/libpca/install --with-armadillo-incdir=/arma/include --with-armadillo-libdir=/arma/lib
make
LD_LIBRARY_PATH=/arma/lib make check
make install
显然,您需要根据自己的情况调整路径。
警告:在某些平台上,您需要显式链接lapack和blas。因此,如果您遇到更多链接器错误,请尝试像这样配置:
LIBS='-llapack -lblas' ./configure --prefix=/libpca/install --with-armadillo-incdir=/arma/include --with-armadillo-libdir=/arma/lib