我试图在Arch Linux
上从源代码构建CNTK
。在Arch Linux上构建微软的CNTK时出现错误:libCntk.Eval-2.0.so抱怨未定义的TensorView引用
Git命令:
git clone https://github.com/Microsoft/CNTK
cd CNTK
git submodule sync --recursive
git submodule update --init --recursive
配置和make命令:
./configure --with-mkl=/usr/local/CNTKCustomMKL --1bitsgd=yes --asgd=no
make all
错误:
building ./bin/cppevalclient for Linux with build type release
/usr/bin/mpic++ -rdynamic -L./lib -L/usr/local/CNTKCustomMKL/3/x64/parallel -L/usr/lib -L/usr/lib -L/usr/release/lib -Wl,-rpath,'$ORIGIN/../lib' -Wl,-rpath,/usr/local/CNTKCustomMKL/3/x64/parallel -Wl,-rpath,/usr/lib -Wl,-rpath,/usr/lib -Wl,-rpath,/usr/release/lib -o bin/cppevalclient .build/Source/../Examples/Evaluation/CPPEvalClient/CPPEvalClient.o -lm -lmkl_cntk_p -liomp5 -lpthread -lCntk.Eval-2.0 -lCntk.Math-2.0 -lCntk.PerformanceProfiler-2.0
./lib/libCntk.Eval-2.0.so: undefined reference to `Microsoft::MSR::CNTK::TensorView<double> const* CNTK::NDArrayView::GetTensorView<double>() const'
./lib/libCntk.Eval-2.0.so: undefined reference to `Microsoft::MSR::CNTK::TensorView<float> const* CNTK::NDArrayView::GetTensorView<float>() const'
collect2: error: ld returned 1 exit status
make: *** [Makefile:628: bin/cppevalclient] Error 1
TensorView
是Source/Math
一部分,所以我希望libCntk.Math-2.0.so
。但在错误消息中,libCntk.Eval-2.0.so
抱怨未定义的参考为TensorView
。
谢谢!
编辑1:
所有这三个.so文件是建立和缴费:
-rwxr-xr-x 1 a a 252658744 2017-06-21 21:01 libCntk.Eval-2.0.so
-rwxr-xr-x 1 a a 59993400 2017-06-21 21:00 libCntk.Math-2.0.so
-rwxr-xr-x 1 a a 1911472 2017-06-21 21:00 libCntk.PerformanceProfiler-2.0.so
编辑2:
3210给g++ (GCC) 7.1.1
笔者建议使用gcc 4.8
。但是,我不想在机器上有两个版本的gcc
。
编辑3:
基于一个建议,我从作者(https://github.com/Microsoft/CNTK/issues/2025)的话,我在Makefile
注释掉EVAL_CLIENT
目标。但是,错误的Makefile
移动到下一个目标:CNTKLIBRARY_CPP_EVAL_EXAMPLES
编辑4:
看来错误与链接器和如--as-needed
,--whole-archive
等一些标志。但是,我还无法修复它。
谢谢!
谢谢。我正在使用CNTK的Docker容器。但是,我使用Arch Linux作为基准操作系统,我想找到一个解决方案,使用更高版本的GCC进行编译,从而简化Arch Linux上的CNTK安装。 – imriss