【问题标题】:Cannot find -lpython2 : MatCaffe installation error找不到 -lpython2:MatCaffe 安装错误
【发布时间】:2015-09-30 16:02:07
【问题描述】:

在构建 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,希望能解决问题。但是没有收获。

我还尝试了以下方法:

  1. 删除 CMakeCache.txt 并进行制作。但它不起作用。
  2. 我在 /cmake-master 中编辑了默认的 CMakeLists.txt 文件,以更改一些默认设置。我发现Caffe中CMakeLists.txt中默认的python版本设置是2。

    //指定使用哪个python版本 python_version:STRING=2.7

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

  1. 我试图查看 matlab/build.make 文件,但找不到可以直接与此错误相关的任何内容。

任何可靠的帮助将不胜感激。我在 Ubuntu 14.04 上使用 MATLAB 2014a。

【问题讨论】:

    标签: python matlab cmake caffe matcaffe


    【解决方案1】:

    这是因为 Utils.cmake 中的 caffe_parse_linker_libs 函数中的一个错误,它将 /usr/lib/x86_64-linux-gnu/libpython2.7.so 之类的东西转换为 -lpython2

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

    elseif(IS_ABSOLUTE ${lib})
      get_filename_component(name_we ${lib} NAME_WE)
      get_filename_component(folder  ${lib} PATH)
    
      string(REGEX MATCH "^lib(.*)" __match ${name_we})
      list(APPEND libflags -l${CMAKE_MATCH_1})
      list(APPEND folders    ${folder})
    else()
    

    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

    【讨论】:

      【解决方案2】:

      根据错误消息和命令,导致它,似乎 python 库安装在不寻常的位置,所以ld(linker) 在其默认路径中找不到它。由于 CMake 脚本找到了标头,它还应该设置 mex 可执行文件以与库本身一起使用,但由于某种原因它没有。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          在那之后它确实编译了,似乎它无论如何都找到了它需要的任何东西。

          【讨论】:

            【解决方案5】:

            我遇到了这个问题,似乎它的根源在于 Cmake 无法获取不同版本的 python,例如“libpython.so.1.0”。我将我的 CMakeCache.txt 文件更改为“libpython.so”,问题就解决了。它不仅适用于 python,我的“cudnn”也有这个问题,这个解决方案解决了这个问题。

            【讨论】:

              猜你喜欢
              • 2013-07-27
              • 2017-10-01
              • 2018-12-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-03-18
              相关资源
              最近更新 更多