VirtualBoxシミュレーターで実行されているubuntuで 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がPythonLibを見つけられないのか、またはどうすればこれに対処する必要があるのでしょうか?
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までしか検索しないことのようです。回避策は、find_package
ステートメントの前にset(Python_ADDITIONAL_VERSIONS 3.4)
を追加することです。この問題について bug を提出したことに注意してください。
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})
最近、Ubuntu 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.
(CMake 2.8.12 find_packageコマンド のオンラインドキュメントから)
解決策は、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
私の場合はうまくいきました。