2017-11-29 28 views
0

私はAndroidプロジェクトに含まれるC++プロジェクトを持っています。このプロジェクトは喜んでスタンドアロンで構築しますが、AndroidのSDKツールで構築されたときのヘッダを後押し発見しようとすると、それは失敗します。AndroidスタジオはBoostヘッダーを見つけることができません

CMake Error at /usr/local/Android/SDK/cmake/3.6.4111459/share/cmake-3.6/Modules/FindBoost.cmake:1753 (message): 
    Unable to find the requested Boost libraries. 
    Unable to find the Boost header files. Please set BOOST_ROOT to the root 
    directory containing Boost or BOOST_INCLUDEDIR to the directory containing 
    Boost's headers. 

次の変数はcmakeのキャッシュエントリと環境変数の両方として設定されています

BOOST_ROOT = ~/manual-software/boost/target 
BOOST_INCLUDEDIR = ~/manual-software/boost 

私はFindBoost.cmakeの次の行にそれを絞り込むました:

# Look for a standard boost header file. 
    find_path(Boost_INCLUDE_DIR 
    NAMES   boost/config.hpp 
    HINTS   ${_boost_INCLUDE_SEARCH_DIRS} 
    PATH_SUFFIXES ${_boost_PATH_SUFFIXES} 
    ) 

今、奇妙な部分は、私が構築するために、まったく同じCMakeのバイナリを使用していることですa)Android Studio端末から、b)Android Studio構築ツールから、2つの異なる結果が得られました。前者の建物は正しく、後者は失敗しています。

message(FATAL_ERROR " 
    Boost_INCLUDE_DIR = ${Boost_INCLUDE_DIR} 
    _boost_INCLUDE_SEARCH_DIRS = ${_boost_INCLUDE_SEARCH_DIRS} 
    _boost_PATH_SUFFIXES = ${_boost_PATH_SUFFIXES}") 

そして今、A)からの出力:

Boost_INCLUDE_DIR = /home/chris/manual-software/boost 
    _boost_INCLUDE_SEARCH_DIRS = ~/manual-software/boost;~/manual-software/boost/target/include;~/manual-software/boost/target;PATHS;C:/boost/include;C:/boost;/sw/local/include 
    _boost_PATH_SUFFIXES = boost-1_61_0;boost_1_61_0;boost/boost-1_61_0;boost/boost_1_61_0;boost-1_61;boost_1_61;boost/boost-1_61;boost/boost_1_61;boost-1_60_0;boost_1_60_0;boost/boost-1_60_0;boost/boost_1_60_0;boost-1_60;boost_1_60;boost/boost-1_60;boost/boost_1_60;boost-1_59_0;boost_1_59_0;boost/boost-1_59_0;boost/boost_1_59_0;boost-1_59;boost_1_59;boost/boost-1_59;boost/boost_1_59;boost-1_58_0;boost_1_58_0;boost/boost-1_58_0;boost/boost_1_58_0;boost-1_58;boost_1_58;boost/boost-1_58;boost/boost_1_58;boost-1_57_0;boost_1_57_0;boost/boost-1_57_0;boost/boost_1_57_0;boost-1_57;boost_1_57;boost/boost-1_57;boost/boost_1_57;boost-1_56_0;boost_1_56_0;boost/boost-1_56_0;boost/boost_1_56_0;boost-1_56;boost_1_56;boost/boost-1_56;boost/boost_1_56;boost-1_55_0;boost_1_55_0;boost/boost-1_55_0;boost/boost_1_55_0;boost-1_55;boost_1_55;boost/boost-1_55;boost/boost_1_55;boost-1_54_0;boost_1_54_0;boost/boost-1_54_0;boost/boost_1_54_0;boost-1_54;boost_1_54;boost/boost-1_54;boost/boost_1_54;boost-1_53_0;boost_1_53_0;boost/boost-1_53_0;boost/boost_1_53_0;boost-1_53;boost_1_53;boost/boost-1_53;boost/boost_1_53;boost-1_52_0;boost_1_52_0;boost/boost-1_52_0;boost/boost_1_52_0;boost-1_52;boost_1_52;boost/boost-1_52;boost/boost_1_52;boost-1_51_0;boost_1_51_0;boost/boost-1_51_0;boost/boost_1_51_0;boost-1_51;boost_1_51;boost/boost-1_51;boost/boost_1_51;boost-1_50_0;boost_1_50_0;boost/boost-1_50_0;boost/boost_1_50_0;boost-1_50;boost_1_50;boost/boost-1_50;boost/boost_1_50;boost-1_49_0;boost_1_49_0;boost/boost-1_49_0;boost/boost_1_49_0;boost-1_49;boost_1_49;boost/boost-1_49;boost/boost_1_49;boost-1_48_0;boost_1_48_0;boost/boost-1_48_0;boost/boost_1_48_0;boost-1_48;boost_1_48;boost/boost-1_48;boost/boost_1_48 

およびb):私はちょうど上記find_path抜粋下に次のメッセージを追加

Boost_INCLUDE_DIR = Boost_INCLUDE_DIR-NOTFOUND 
    _boost_INCLUDE_SEARCH_DIRS = ~/manual-software/boost;~/manual-software/boost/target/include;~/manual-software/boost/target;PATHS;C:/boost/include;C:/boost;/sw/local/include 
    _boost_PATH_SUFFIXES = boost-1_61_0;boost_1_61_0;boost/boost-1_61_0;boost/boost_1_61_0;boost-1_61;boost_1_61;boost/boost-1_61;boost/boost_1_61;boost-1_60_0;boost_1_60_0;boost/boost-1_60_0;boost/boost_1_60_0;boost-1_60;boost_1_60;boost/boost-1_60;boost/boost_1_60;boost-1_59_0;boost_1_59_0;boost/boost-1_59_0;boost/boost_1_59_0;boost-1_59;boost_1_59;boost/boost-1_59;boost/boost_1_59;boost-1_58_0;boost_1_58_0;boost/boost-1_58_0;boost/boost_1_58_0;boost-1_58;boost_1_58;boost/boost-1_58;boost/boost_1_58;boost-1_57_0;boost_1_57_0;boost/boost-1_57_0;boost/boost_1_57_0;boost-1_57;boost_1_57;boost/boost-1_57;boost/boost_1_57;boost-1_56_0;boost_1_56_0;boost/boost-1_56_0;boost/boost_1_56_0;boost-1_56;boost_1_56;boost/boost-1_56;boost/boost_1_56;boost-1_55_0;boost_1_55_0;boost/boost-1_55_0;boost/boost_1_55_0;boost-1_55;boost_1_55;boost/boost-1_55;boost/boost_1_55;boost-1_54_0;boost_1_54_0;boost/boost-1_54_0;boost/boost_1_54_0;boost-1_54;boost_1_54;boost/boost-1_54;boost/boost_1_54;boost-1_53_0;boost_1_53_0;boost/boost-1_53_0;boost/boost_1_53_0;boost-1_53;boost_1_53;boost/boost-1_53;boost/boost_1_53;boost-1_52_0;boost_1_52_0;boost/boost-1_52_0;boost/boost_1_52_0;boost-1_52;boost_1_52;boost/boost-1_52;boost/boost_1_52;boost-1_51_0;boost_1_51_0;boost/boost-1_51_0;boost/boost_1_51_0;boost-1_51;boost_1_51;boost/boost-1_51;boost/boost_1_51;boost-1_50_0;boost_1_50_0;boost/boost-1_50_0;boost/boost_1_50_0;boost-1_50;boost_1_50;boost/boost-1_50;boost/boost_1_50;boost-1_49_0;boost_1_49_0;boost/boost-1_49_0;boost/boost_1_49_0;boost-1_49;boost_1_49;boost/boost-1_49;boost/boost_1_49;boost-1_48_0;boost_1_48_0;boost/boost-1_48_0;boost/boost_1_48_0;boost-1_48;boost_1_48;boost/boost-1_48;b 
oost/boost_1_48 

なぜfind_pathが異なっ行動しています?

答えて

0

この問題は、CMakeのクロスコンパイルの安全機能には及ばない。 CMakeは、CMAKE_FIND_ROOT_PATHにないパスを見つけられません。これは、Androidのクロスコンパイルの場合、関連するSDKパスに設定されます。

(ライブラリファイルは、ターゲットアーキテクチャと互換性があることに注意しながら)、ホストシステムからライブラリを使用するには、システムのルートや検索ルートパスの両方を使用することを見つけることができなければなりませんで

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH) 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH) 
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH) 

この場合、CMAKE_FIND_ROOT_PATH_MODE_INCLUDEのみが必要です。

関連する問題