无法在 libpca 中编译示例代码
Cannot compile example code in libpca
我正在尝试安装 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
它returns
make[1]: Nothing to be done for 'all'
make[1]: Nothing to be done for 'all-am'
并且没有创建新文件。然后我 cd 到 examples/simple
和 运行
/my/dir/libpca-1.3.3/examples/simple$ make
它returns:
make: Nothing to be done for 'all'
并且没有创建新文件。那我运行
/my/dir/libpca-1.3.3/examples/simple$ make check
它returns出现以下错误:
上述错误中的变量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
后,还是报同样的错误
我觉得include路径和环境变量应该有问题。我该如何解决?
此外,如果我需要在/my/dir/working_dir/
中编写代码,我该如何设置路径?
--------------------------------编辑如下-------- ----------
当我进行如下所述的更新时,在第 3 步:
/my/dir/libpca-1.3.3$ LD_LIBRARY_PATH=/my/dir/arma_install/lib64 make check
它returns出现以下错误:
LD_LIBRARY_PATH=/my/dir/arma_install/lib64/ make check
Making check in src/lib
make[1]: Entering directory `/my/dir/libpca-1.3.3/src/lib'
make[1]: Leaving directory `/my/dir/libpca-1.3.3/src/lib'
Making check in test
make[1]: Entering directory `/my/dir/libpca-1.3.3/test'
make unittest
make[2]: Entering directory `/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/lib64
libtool: 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: In function `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): 在函数中
`stats::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 > const&,
char const*,
arma::arma_blas_type_only::elem_type>::result
const*)':
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::apply,
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::apply,
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: *** [检查递归] 错误 1
接下来我该做什么?
您需要告诉 linker 您的犰狳图书馆的位置。您可以通过两种方式实现此目的:
- 通过环境变量:
export LIBRARY_PATH=/arma/lib:$LIBRARY_PATH
- 通过armadillo include和库路径直接配置:
./configure --with-armadillo-incdir=/arma/include --with-armadillo-libdir=/arma/lib
我建议使用选项 2,因为它可以防止设置额外的环境变量,这可能会污染您的环境。
请注意,--prefix
表示安装 libpca 的目录。这应该和源码目录不一样!
配置后您可以 运行 make
、make check
和 make install
。为了 make check
成功,linux 库加载器需要知道犰狳共享库的位置。所以一种选择是 运行 像这样: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
显然,您需要根据自己的情况调整路径。
警告:在某些平台上,您需要明确 link 使用 lapack 和 blas。因此,如果您 运行 陷入进一步的 linker 错误,请尝试这样配置:
LIBS='-llapack -lblas' ./configure --prefix=/libpca/install --with-armadillo-incdir=/arma/include --with-armadillo-libdir=/arma/lib
我正在尝试安装 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
它returns
make[1]: Nothing to be done for 'all'
make[1]: Nothing to be done for 'all-am'
并且没有创建新文件。然后我 cd 到 examples/simple
和 运行
/my/dir/libpca-1.3.3/examples/simple$ make
它returns:
make: Nothing to be done for 'all'
并且没有创建新文件。那我运行
/my/dir/libpca-1.3.3/examples/simple$ make check
它returns出现以下错误:
上述错误中的变量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
后,还是报同样的错误
我觉得include路径和环境变量应该有问题。我该如何解决?
此外,如果我需要在/my/dir/working_dir/
中编写代码,我该如何设置路径?
--------------------------------编辑如下-------- ----------
当我进行如下所述的更新时,在第 3 步:
/my/dir/libpca-1.3.3$ LD_LIBRARY_PATH=/my/dir/arma_install/lib64 make check
它returns出现以下错误:
LD_LIBRARY_PATH=/my/dir/arma_install/lib64/ make check
Making check in src/lib
make[1]: Entering directory `/my/dir/libpca-1.3.3/src/lib'
make[1]: Leaving directory `/my/dir/libpca-1.3.3/src/lib'
Making check in test
make[1]: Entering directory `/my/dir/libpca-1.3.3/test'
make unittest
make[2]: Entering directory `/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: In function `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): 在函数中 `stats::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 > const&, char const*, arma::arma_blas_type_only::elem_type>::result const*)':
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::apply, 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::apply, 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: *** [检查递归] 错误 1
接下来我该做什么?
您需要告诉 linker 您的犰狳图书馆的位置。您可以通过两种方式实现此目的:
- 通过环境变量:
export LIBRARY_PATH=/arma/lib:$LIBRARY_PATH
- 通过armadillo include和库路径直接配置:
./configure --with-armadillo-incdir=/arma/include --with-armadillo-libdir=/arma/lib
我建议使用选项 2,因为它可以防止设置额外的环境变量,这可能会污染您的环境。
请注意,--prefix
表示安装 libpca 的目录。这应该和源码目录不一样!
配置后您可以 运行 make
、make check
和 make install
。为了 make check
成功,linux 库加载器需要知道犰狳共享库的位置。所以一种选择是 运行 像这样: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
显然,您需要根据自己的情况调整路径。
警告:在某些平台上,您需要明确 link 使用 lapack 和 blas。因此,如果您 运行 陷入进一步的 linker 错误,请尝试这样配置:
LIBS='-llapack -lblas' ./configure --prefix=/libpca/install --with-armadillo-incdir=/arma/include --with-armadillo-libdir=/arma/lib