CMake no puede encontrar PythonLibs

13

Estoy tratando de construir inria Graphite en mi ubuntu que se ejecuta en un simulador VirtualBox, sigo las instrucciones e instalo los python-devpaquetes, pero cuando ejecuto cmake, todavía aparece un error:

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)

Lo comprobé /usr/lib/y encontré

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

Entonces, ¿por qué cmake no puede encontrar las PythonLibs, o cómo debo lidiar con esto?

tintin
fuente

Respuestas:

21

La instalación python-devrealmente solucionó esto para mí:

sudo apt-get install python-dev

Tengo la pista aquí: https://github.com/Valloric/YouCompleteMe/issues/484

helgar
fuente
2
En lugar de señalar a un enlace externo favor copiar y pegar la parte pertinente de allí de modo que si el enlace es inalcanzable por alguna razón, los contenidos están todavía disponibles aquí ..
heemayl
1
Bueno, la solución es ejecutar:sudo apt-get install python-dev
helgar
@helgar Edite su respuesta y agregue el comando anterior.
Ron
3
Una pequeña nota: para uso de Python 3 apt-get install python3-dev. python-devy python3-devson metapaquetes que extraen el desarrollador más actual en sentido ascendente para el Python seleccionado.
rbaleksandar
Esto no resuelve el problema en todos los casos, la respuesta dada por @Job explica por qué.
minerales
10

El problema parece ser que Ubuntu 14.04 instala Python 3.4 por defecto y la versión CMake de Ubuntu (2.8) solo busca hasta Python 3.3. Una solución alternativa es agregar set(Python_ADDITIONAL_VERSIONS 3.4)antes de la find_packagedeclaración. Tenga en cuenta que presenté un error sobre este problema.

Desde CMake 3.0, CMake busca hasta Python 3.4 , por lo que instalar esa versión manualmente también debería solucionar el problema.

Trabajo
fuente
Sería bueno dar una explicación sobre el voto negativo.
Trabajo
2

Para mí, el problema era un mal caché

rm CMakeCache.txt

Eliminé el caché con la versión 2.7 anterior y le permití encontrar 3.2 en mi caso.

El cmake que usé es

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})
Dirk Bester
fuente
1

Recientemente tuve un problema similar con Ubuntu 14.04 de 64 bits; aparentemente, CMake no busca en las carpetas de instalación dependientes de la arquitectura de manera predeterminada:

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.

(de la documentación en línea de CMake 2.8.12 del comando find_package )

Una solución consiste en establecer esta CMAKE_LIBRARY_ARCHITECTURE en el archivo raíz del proyecto CMakeLists.txt (en su caso, sería editar src / packages / OGF / gel_python3 / CMakeLists.txt) antes de llamar a find_package para PythonLibs; por ejemplo:

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

Eso funcionó en mi caso.

Bertrand Moreau
fuente