CMake không thể tìm thấy PythonLibs


13

Tôi đang cố gắng xây dựng inria Graphite trên Ubuntu của mình đang chạy trong trình giả lập VirtualBox, tôi làm theo hướng dẫn và cài đặt các python-devgói, nhưng khi tôi chạy cmake, vẫn gặp lỗi:

CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108          (message):
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
(Required is at least version "3.2")
Call Stack (most recent call first):
 /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:315     (_FPHSA_FAILURE_MESSAGE)
 /usr/share/cmake-2.8/Modules/FindPythonLibs.cmake:208 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
 src/packages/OGF/gel_python3/CMakeLists.txt:11 (FIND_PACKAGE)

Tôi đã kiểm tra /usr/lib/và tìm

tintin@tintin-VirtualBox:/usr/lib$ find . -name "libpython*"
./x86_64-linux-gnu/libpython3.4m.so.1.0
./x86_64-linux-gnu/libpython2.7.so.1.0
./x86_64-linux-gnu/libpython3.4m.a
./x86_64-linux-gnu/libpython2.7.a
./x86_64-linux-gnu/libpython3.4m.so
./x86_64-linux-gnu/libpython2.7.so
./x86_64-linux-gnu/libpython2.7.so.1
./x86_64-linux-gnu/libpython3.4m.so.1

vậy tại sao cmake không thể tìm thấy PythonLib, hoặc tôi nên xử lý vấn đề này như thế nào?

Câu trả lời:


21

Cài đặt python-devthực sự đã sửa lỗi này cho tôi:

sudo apt-get install python-dev

Có gợi ý ở đây: https://github.com/Valloric/YouCompleteMe/issues/484


2
Thay vì chỉ vào một liên kết bên ngoài, vui lòng sao chép-dán phần có liên quan từ đó để nếu liên kết không thể truy cập được vì một số lý do, nội dung vẫn có sẵn ở đây ..
heemayl

1
Chà, giải pháp là chạy:sudo apt-get install python-dev
helgar

@helgar Vui lòng chỉnh sửa câu trả lời của bạn và thêm lệnh trên.
Ron

3
Một lưu ý nhỏ: cho Python 3 sử dụng apt-get install python3-dev. python-devpython3-devlà các siêu dữ liệu kéo ngược dòng dev mới nhất cho Python đã chọn.
rbaleksandar

Điều này không giải quyết được vấn đề trong mọi trường hợp, câu trả lời được đưa ra bởi @Job giải thích lý do.
khoáng sản

10

Vấn đề dường như là Ubuntu 14.04 cài đặt Python 3.4 theo mặc định và phiên bản CMake từ Ubuntu (2.8) chỉ tìm kiếm tối đa Python 3.3. Một cách giải quyết là thêm set(Python_ADDITIONAL_VERSIONS 3.4)trước khi find_packagetuyên bố. Lưu ý rằng tôi đã nộp một lỗi về vấn đề này.

Kể từ CMake 3.0, CMake tìm kiếm lên tới Python 3.4 , do đó, cài đặt phiên bản đó theo cách thủ công cũng sẽ khắc phục sự cố.


Nó sẽ là tốt đẹp để đưa ra một lời giải thích về downvote.
Công việc

2

Đối với tôi vấn đề là một bộ đệm xấu

rm CMakeCache.txt

Đã xóa bộ đệm với phiên bản 2.7 cũ và cho phép nó tìm thấy 3.2 trong trường hợp của tôi.

Các cmake tôi đã sử dụng là

find_package(PythonInterp 3.2 REQUIRED)
find_package(PythonLibs 3.2 REQUIRED)
message(STATUS "PYTHON_LIBRARIES = ${PYTHON_LIBRARIES}")
message(STATUS "PYTHON_EXECUTABLE = ${PYTHON_EXECUTABLE}")
message(STATUS "PYTHON_INCLUDE_DIRS = ${PYTHON_INCLUDE_DIRS}")
...
include_directories(${PYTHON_INCLUDE_DIRS})

1

Gần đây tôi đã gặp vấn đề tương tự với Ubuntu 14.04 64-bit; rõ ràng, CMake không xem xét các thư mục cài đặt phụ thuộc kiến ​​trúc theo mặc định:

CMake constructs a set of possible installation prefixes for the package. Under
each prefix several directories are searched for a configuration file. The tables
below show the directories searched.

[...]

  <prefix>/(lib/<arch>|lib|share)/cmake/<name>*/          (U)
  <prefix>/(lib/<arch>|lib|share)/<name>*/                (U)
  <prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/  (U)

[...]

In all cases the <name> is treated as case-insensitive and corresponds to any of
the names specified (<package> or names given by NAMES). Paths with lib/<arch>
are enabled if CMAKE_LIBRARY_ARCHITECTURE is set.

(từ tài liệu trực tuyến CMake 2.8.12 của lệnh find_package )

Một giải pháp bao gồm cài đặt CMAKE_LIBRARY_ARCHITECTURE này trong tệp CMakeLists.txt gốc của dự án (trong trường hợp của bạn sẽ chỉnh sửa src / gói / OGF / gel_python3 / CMakeLists.txt) trước khi gọi find_package cho PythonLibs; ví dụ:

cmake_minimum_required(VERSION 2.8)
project(project_name)

# Check the architecture and set CMAKE_LIBRARY_ARCHITECTURE accordingly
if(UNIX)
  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
    set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
  endif()
endif()

find_package(PythonInterp 3.2 REQUIRED)
find_package(PythonLibs 3.2 REQUIRED)

# Rest of your file

Điều đó đã làm việc trong trường hợp của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.