2017-07-06 79 views
0

我試圖在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 

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:

​​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等一些標誌。但是,我還無法修復它。

謝謝!

回答

1

不確定是否是由GCC 7.1.1引起的。如果你不想在機器上安裝兩個版本的gcc,你能運行docker嗎? CNTK也支持碼頭集裝箱。詳情請見https://docs.microsoft.com/en-us/cognitive-toolkit/CNTK-Docker-Containers

+0

謝謝。我正在使用CNTK的Docker容器。但是,我使用Arch Linux作爲基準操作系統,我想找到一個解決方案,使用更高版本的GCC進行編譯,從而簡化Arch Linux上的CNTK安裝。 – imriss

相關問題