CMake ไม่พบ PythonLib


14

ฉันพยายามที่จะสร้างinria Graphiteบน Ubuntu ซึ่งกำลังทำงานในโปรแกรมจำลอง VirtualBox ฉันทำตามคำแนะนำและติดตั้งpython-devแพ็คเกจ แต่เมื่อฉันเรียกใช้ cmake ยังคงมีข้อผิดพลาด:

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)

ฉันตรวจสอบ/usr/lib/และค้นหา

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

เหตุใด cmake ไม่พบ PythonLibs หรือฉันควรจัดการกับสิ่งนี้อย่างไร

คำตอบ:


21

การติดตั้งpython-devแก้ไขจริงสำหรับฉัน:

sudo apt-get install python-dev

มีคำใบ้ที่นี่: https://github.com/Valloric/YouCompleteMe/issues/484


2
แทนที่จะชี้ไปที่ลิงก์ภายนอกโปรดคัดลอกวางส่วนที่เกี่ยวข้องจากที่นั่นเพื่อที่ว่าหากลิงก์นั้นไม่สามารถเข้าถึงได้ด้วยเหตุผลบางอย่างเนื้อหายังคงมีอยู่ที่นี่ ..
heemayl

1
ทางแก้ก็คือ:sudo apt-get install python-dev
เฮลการ์

@helgar โปรดแก้ไขคำตอบของคุณและเพิ่มคำสั่งด้านบน
Ron

3
โน้ตเล็ก ๆ สำหรับหลาม 3 apt-get install python3-devการใช้งาน python-devและpython3-devเป็น metapackages ที่ดึง dev อัปสตรีมล่าสุดสำหรับ Python ที่เลือก
rbaleksandar

นี่ไม่สามารถแก้ปัญหาได้ในทุกกรณีคำตอบที่ @Job ให้คำอธิบายว่าทำไม
แร่ธาตุ

10

ปัญหาน่าจะเป็นว่า Ubuntu 14.04 ติดตั้ง Python 3.4 โดยค่าเริ่มต้นและรุ่น CMake จาก Ubuntu (2.8) ค้นหาได้สูงสุด Python 3.3 เท่านั้น วิธีแก้ปัญหาคือการเพิ่มset(Python_ADDITIONAL_VERSIONS 3.4)ก่อนfind_packageคำสั่ง โปรดทราบว่าฉันได้ยื่นข้อผิดพลาดเกี่ยวกับปัญหานี้

ตั้งแต่ CMake 3.0, CMake ค้นหาจนถึง Python 3.4ดังนั้นการติดตั้งเวอร์ชันนั้นด้วยตนเองควรแก้ไขปัญหาด้วย


มันจะเป็นการดีถ้าให้คำอธิบายเกี่ยวกับ downvote
งาน

3

สำหรับฉันปัญหาคือแคชไม่ดี

rm CMakeCache.txt

ลบแคชด้วย 2.7 รุ่นเก่าและอนุญาตให้พบ 3.2 ในกรณีของฉัน

cmake ที่ฉันใช้คือ

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

ฉันเพิ่งมีปัญหาที่คล้ายกันกับ Ubuntu 14.04 64-bit; เห็นได้ชัดว่า CMake ไม่ได้มองเข้าไปในโฟลเดอร์ติดตั้งสถาปัตยกรรมขึ้นอยู่กับค่าเริ่มต้น:

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.

(จาก CMake 2.8.12 เอกสารออนไลน์ของคำสั่ง find_package )

โซลูชันประกอบด้วยการตั้งค่า CMAKE_LIBRARY_ARCHITECTURE นี้ในไฟล์รูทโครงการ CMakeLists.txt (ในกรณีของคุณที่จะแก้ไข src / packages / OGF / gel_python3 / CMakeLists.txt) ก่อนเรียกใช้ find_package สำหรับ PythonLibs; เช่น:

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

ที่ทำงานในกรณีของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.