在Arch Linux上构建Microsoft的CNTK出错:libCntk.Eval-2.0.so抱怨对TensorView的未定义引用

时间:2017-07-06 12:39:04

标签: undefined-reference cntk gcc4.8 gcc7

我正在尝试从CNTK上的来源构建Arch Linux

git命令:

git clone https://github.com/Microsoft/CNTK
cd CNTK
git submodule sync --recursive
git submodule update --init --recursive

配置和制作命令:

./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

TensorViewSource/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:

mpic++ --version提供g++ (GCC) 7.1.1

作者建议使用gcc 4.8。但是,我不希望机器上有两个版本的gcc

编辑3:

根据我从作者那里得到的建议(https://github.com/Microsoft/CNTK/issues/2025),我在EVAL_CLIENT中注释了Makefile目标。但是,错误已移至MakefileCNTKLIBRARY_CPP_EVAL_EXAMPLES

中的下一个目标

编辑4:

似乎错误与链接器和一些标志有关,例如--as-needed--whole-archive等。但是,我无法解决它。

谢谢!

1 个答案:

答案 0 :(得分:1)

不确定是否是由GCC 7.1.1引起的。如果你不想在机器上安装两个版本的gcc,你能运行docker吗? CNTK也支持docker容器。可以找到详细信息https://docs.microsoft.com/en-us/cognitive-toolkit/CNTK-Docker-Containers