找不到-lpython2:MatCaffe安装错误

找不到-lpython2:MatCaffe安装错误,python,matlab,cmake,caffe,matcaffe,Python,Matlab,Cmake,Caffe,Matcaffe,在构建MatCaffe(Caffe的Matlab包装器)的过程中,我面临以下错误: [ 96%] Built target convert_mnist_data [ 96%] Built target convert_mnist_siamese_data [ 98%] Built target pycaffe [100%] Building Matlab interface: /home/trunks/Downloads/caffe-master/matlab/+caffe/private/ca

在构建MatCaffe(Caffe的Matlab包装器)的过程中,我面临以下错误:

[ 96%] Built target convert_mnist_data
[ 96%] Built target convert_mnist_siamese_data
[ 98%] Built target pycaffe
[100%] Building Matlab interface: /home/trunks/Downloads/caffe-master/matlab/+caffe/private/caffe_.mexa64
Building with 'g++'.
Warning: You are using gcc version '4.8.2'. The version of gcc is not supported. The version currently supported with MEX is '4.7.x'. For a list of currently supported compilers see: http://www.mathworks.com/support/compilers/current_release.
Warning: You are using gcc version '4.8.2-19ubuntu1)'. The version of gcc is not supported. The version currently supported with MEX is '4.7.x'. For a list of currently supported compilers see: http://www.mathworks.com/support/compilers/current_release.
/usr/bin/ld: cannot find -lpython2
collect2: error: ld returned 1 exit status

make[2]: *** [../matlab/+caffe/private/caffe_.mexa64] Error 255
make[1]: *** [matlab/CMakeFiles/matlab.dir/all] Error 2
make: *** [all] Error 2
仔细检查后,我发现使用以下命令,以下文件导致了上述错误:

 grep -rnw "./" -e "-lpython2"
它向我透露了以下情况:

./matlab/CMakeFiles/matlab.dir/build.make:53:   cd /home/trunks/Downloads/caffe-master/build/matlab && /usr/local/MATLAB/R2014a/bin/mex -output /home/trunks/Downloads/caffe-master/matlab/+caffe/private/caffe_.mexa64 /home/trunks/Downloads/caffe-master/matlab/+caffe/private/caffe_.cpp -DCPU_ONLY -DWITH_PYTHON_LAYER -DGTEST_USE_OWN_TR1_TUPLE -I/home/trunks/Downloads/caffe-master/src -I/usr/include -I/home/trunks/Downloads/caffe-master/build/external/glog-install/include -I/home/trunks/Downloads/caffe-master/build/external/gflags-install/include -I/home/trunks/Downloads/caffe-master/build/include -I/usr/local/include/opencv -I/usr/local/include -I/usr/include/python2.7 -I/home/trunks/anaconda/lib/python2.7/site-packages/numpy/core/include -I/home/trunks/Downloads/caffe-master/include -I/home/trunks/Downloads/caffe-master/build -L/home/trunks/Downloads/caffe-master/build/lib -L/usr/lib/x86_64-linux-gnu -L/home/trunks/Downloads/caffe-master/build/external/gflags-install/lib -L/home/trunks/Downloads/caffe-master/build/external/glog-install/lib -L/usr/lib -L/usr/local/lib -L/usr/local/lib -L/usr/local/lib -L/usr/local/lib -lcaffe -lboost_system -lboost_thread -lpthread -lgflags -lglog -lhdf5_hl -lhdf5 -llmdb -lleveldb -lsnappy -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs -lopenblas -lpython2 -lboost_python -lprotobuf
因此,我将对应的-lpython2更改为-lpython2.7,希望能够解决这个问题。但是没有屈服

我还尝试了以下方法:

./matlab/CMakeFiles/matlab.dir/build.make:53:   cd /home/trunks/Downloads/caffe-master/build/matlab && /usr/local/MATLAB/R2014a/bin/mex -output /home/trunks/Downloads/caffe-master/matlab/+caffe/private/caffe_.mexa64 /home/trunks/Downloads/caffe-master/matlab/+caffe/private/caffe_.cpp -DCPU_ONLY -DWITH_PYTHON_LAYER -DGTEST_USE_OWN_TR1_TUPLE -I/home/trunks/Downloads/caffe-master/src -I/usr/include -I/home/trunks/Downloads/caffe-master/build/external/glog-install/include -I/home/trunks/Downloads/caffe-master/build/external/gflags-install/include -I/home/trunks/Downloads/caffe-master/build/include -I/usr/local/include/opencv -I/usr/local/include -I/usr/include/python2.7 -I/home/trunks/anaconda/lib/python2.7/site-packages/numpy/core/include -I/home/trunks/Downloads/caffe-master/include -I/home/trunks/Downloads/caffe-master/build -L/home/trunks/Downloads/caffe-master/build/lib -L/usr/lib/x86_64-linux-gnu -L/home/trunks/Downloads/caffe-master/build/external/gflags-install/lib -L/home/trunks/Downloads/caffe-master/build/external/glog-install/lib -L/usr/lib -L/usr/local/lib -L/usr/local/lib -L/usr/local/lib -L/usr/local/lib -lcaffe -lboost_system -lboost_thread -lpthread -lgflags -lglog -lhdf5_hl -lhdf5 -llmdb -lleveldb -lsnappy -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs -lopenblas -lpython2 -lboost_python -lprotobuf
  • 删除cmakcache.txt并执行make。但它没有起作用
  • 我在/cmake master中编辑了默认的CMakeLists.txt文件,以更改一些默认设置。我发现Caffe中CMakeLists.txt中的默认python版本设置为2

    //指定要使用的python版本 python_版本:STRING=2.7

  • 我将其更改为2,并在一个新的构建文件夹中重复整个configure-generate-make过程。但是没有屈服。每次相同的matlab/build.make文件显示-lpython2时,将其直接更改为2.7不会产生任何效果

  • 我试图查看matlab/build.make文件,但在那里找不到任何与此错误直接相关的内容

  • 任何坚实的帮助都将不胜感激。我在Ubuntu 14.04上使用Matlab2014a。

    根据错误消息和命令,导致它的原因是,python库似乎安装在不寻常的位置,因此
    ld
    (链接器)无法在其默认路径中找到它。由于CMake脚本已经找到了头文件,它还应该设置
    mex
    可执行文件,以便使用库本身,但由于某些原因,它没有这样做


    使构建包工作的最简单方法是将
    LD_LIBRARY\u PATH
    设置到python库所在的目录,然后运行
    make
    。如果您想修复CMake脚本,这可能会对您有所帮助。

    感谢@Tsyvarev提供的答案。我找到了一个相当简单的解决办法。我刚刚创建了一个符号链接(libpython2.so),它指向/usr/lib文件夹中的libpython2.7.so。这就解决了问题。libpython2.7.so也出现在/usr/lib中,所以我不认为这是一个异常安装的问题。

    我也有同样的问题。绝望中,我刚刚从
    build matlab/matlab/CMakeFiles/matlab.dir/build.make中删除了
    -lpython2


    这是因为Utils.cmake中的
    caffe\u parse\u linker\u libs
    函数中有一个bug,该函数将类似于
    /usr/lib/x86\u 64-linux-gnu/libpython2.7的内容转换为
    -lpython2

    这可以通过替换(在cmake/Utils.cmake中)来解决

    elseif(IS_ABSOLUTE ${lib})
      get_filename_component(folder  ${lib} PATH)
      get_filename_component(filename ${lib} NAME)
      string(REGEX REPLACE "\\.[^.]*$" "" filename_without_shortest_ext ${filename})
    
      string(REGEX MATCH "^lib(.*)" __match ${filename_without_shortest_ext})
      list(APPEND libflags -l${CMAKE_MATCH_1})
      list(APPEND folders    ${folder})
    else()
    

    更新后的函数正确地将
    /usr/lib/x86_64-linux-gnu/libpython2.7.so
    转换为
    -lpython2.7
    我遇到了这个问题,它的根源似乎是Cmake无法获得不同版本的python,例如“libpython.so.1.0”。我将cmakcache.txt文件改为“libpython.so”,问题就解决了。不仅是python,我的“cudnn”也有这个问题,这个解决方案解决了这个问题