CMake는 PythonLibs를 찾을 수 없습니다


14

VirtualBox 시뮬레이터에서 실행되는 우분투에 inria Graphite 를 빌드하려고하는데 지침을 따르고 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

@helgar 답을 편집 하고 위의 명령을 추가하십시오.
Ron

3
작은 참고 사항 : Python 3 용 apt-get install python3-dev. python-dev그리고 python3-dev선택한 파이썬의 최신 dev에 상류를 끌어 metapackages이다.
rbaleksandar

이것은 모든 경우에 문제를 해결하지 못합니다. @ Job의 대답은 그 이유를 설명합니다.
미네랄

10

문제는 Ubuntu 14.04가 기본적으로 Python 3.4를 설치하고 Ubuntu (2.8)의 CMake 버전은 Python 3.3까지만 검색하는 것 같습니다. 해결 방법은 명령문 set(Python_ADDITIONAL_VERSIONS 3.4)앞에 추가 하는 find_package것입니다. 이 문제에 대한 버그 를 신고했습니다 .

CMake 3.0부터 CMake 는 Python 3.4까지 검색 하므로 해당 버전을 수동으로 설치하면 문제가 해결됩니다.


downvote에 대해 설명하는 것이 좋을 것입니다.
Job

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

나는 최근 우분투 14.04 64 비트와 비슷한 문제를 겪었다. 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.

( find_package 명령 의 CMake 2.8.12 온라인 문서에서 )

해결책은 PythonLibs에 대해 find_package를 호출하기 전에 프로젝트 루트 CMakeLists.txt 파일 (이 경우 src / packages / OGF / gel_python3 / CMakeLists.txt를 편집하는 경우)에서이 CMAKE_LIBRARY_ARCHITECTURE를 설정하는 것으로 구성됩니다. 예를 들어 :

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.