O CMake não consegue encontrar PythonLibs

13

Estou tentando criar inria Graphite no meu ubuntu, que está sendo executado em um simulador do VirtualBox, sigo as instruções e instalo os python-devpacotes, mas quando executo o cmake, ainda há um erro:

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)

Eu verifiquei o /usr/lib/e encontrar

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

então por que o cmake não consegue encontrar o PythonLibs ou como devo lidar com isso?

tintim
fonte

Respostas:

21

A instalação python-devrealmente corrigiu isso para mim:

sudo apt-get install python-dev

Obtenha a dica aqui: https://github.com/Valloric/YouCompleteMe/issues/484

helgar
fonte
2
Em vez de apontar para uma ligação externa copie e cole a parte relevante de lá para que se o link está inacessível por algum motivo o conteúdo ainda estão disponíveis aqui ..
heemayl
1
Bem, a solução é executar:sudo apt-get install python-dev
helgar
@ helgar Por favor, edite sua resposta e adicione o comando acima.
Ron
3
Uma pequena nota: para uso em Python 3 apt-get install python3-dev. python-deve python3-devsão metapacotes que puxam o desenvolvedor mais atual para o Python selecionado.
Rbaleksandar
Isso não resolve o problema em todos os casos, a resposta dada por @Job explica o porquê.
minerais
10

O problema parece ser que o Ubuntu 14.04 instala o Python 3.4 por padrão e a versão CMake do Ubuntu (2.8) pesquisa apenas até o Python 3.3. Uma solução alternativa é adicionar set(Python_ADDITIONAL_VERSIONS 3.4)antes da find_packagedeclaração. Observe que eu registrei um bug sobre esse problema.

Desde o CMake 3.0, o CMake pesquisa até o Python 3.4 , portanto, a instalação manual dessa versão também deve solucionar o problema.

Trabalho
fonte
Seria bom dar uma explicação sobre o voto negativo.
Job
2

Para mim, o problema era um cache ruim

rm CMakeCache.txt

Removido o cache da versão 2.7 antiga e permitindo encontrar 3.2 no meu caso.

O cmake que usei é

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
fonte
1

Recentemente, tive um problema semelhante com o Ubuntu 14.04 de 64 bits; aparentemente, o CMake não analisa as pastas de instalação dependentes da arquitetura por padrão:

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.

(da documentação on-line do CMake 2.8.12 do comando find_package )

Uma solução consiste em definir este CMAKE_LIBRARY_ARCHITECTURE no arquivo CMakeLists.txt raiz do projeto (no seu caso, estaria editando src / packages / OGF / gel_python3 / CMakeLists.txt) antes de chamar find_package para PythonLibs; por exemplo:

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

Isso funcionou no meu caso.

Bertrand Moreau
fonte