CMake는 PythonLibs를 찾을 수 없습니다 VirtualBox 시뮬레이터에서

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를 찾을 수없는 이유는 무엇입니까?



답변

python-dev실제로 설치 하면이 문제가 해결되었습니다.

sudo apt-get install python-dev

여기에 힌트가 있습니다 : https://github.com/Valloric/YouCompleteMe/issues/484


답변

문제는 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까지 검색 하므로 해당 버전을 수동으로 설치하면 문제가 해결됩니다.


답변

나에게 문제는 나쁜 캐시였다

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})

답변

나는 최근 우분투 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

그것은 제 경우에 효과가있었습니다.