2016-05-06 14 views
0

私は、Android用CMakeのベースのプロジェクトをビルドNDKのr10eを使用して、x86_64版、ツールチェイン名はarm-linux-androideabi-clang3.5のWindowsマクロ、NDKのr10e、CMakeの

現在、私はそのいくつかを示唆し、非常に奇妙なエラーを取得していますされています_WIN32_WIN64__MINGW32__のようなWindowsプリプロセッサマクロが出てきます。

私のプロジェクトは、cmakeのコールが

、特に、 filesystem

は、私がここでhttps://github.com/taka-no-me/android-cmake(このツールチェインはOpenCVのに使用されている)

からCMakeのAndroidのツールチェーンを使用して、バージョン3-03-11、stlplus3の部品を使用していますここで

set ANDROID_SDK=C:\Android\sdk 
set ANDROID_NDK=c:\Android\android-ndk-r10e 
set ANDROID_EXECUTABLE=%ANDROID_SDK%\tools\android.bat 
set CMAKE_PATH=C:\Program Files (x86)\CMake\bin 
set PATH=%PATH%;%CMAKE_PATH% 

cmake .. -DCMAKE_TOOLCHAIN_FILE="%~dp0\..\cmake\android.toolchain.cmake" -DCMAKE_BUILD_TYPE=Release -DANDROID_NDK=%ANDROID_NDK%^ 
    -DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-clang3.5 -DANDROID_EXTRA_NDK_VERSIONS="-r10e"^ 
    -DANDROID_ABI="armeabi-v7a with NEON"^ 
    -G"Ninja" 

は、コンパイラの出力です:

[29/186] Building CXX object modules/3rdparty/stlplus3/CMakeFiles/stlplus3.dir/portability_fixes.cpp.o 
FAILED: C:\Android\android-ndk-r10e\toolchains\llvm-3.5\prebuilt\windows-x86_64\bin\clang++.exe -DANDROID -D_CRT_SECURE_NO_WARNINGS -D__STDC_LIMIT_MACROS 
-isystem C:/Android/android-ndk-r10e/platforms/android-8/arch-arm/usr/include -isystem C:/Android/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include -isystem C:/Android/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -isystem C:/Android/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/backward 
-IC:/opencv/android-clang/sdk/native/jni/include/opencv -IC:/opencv/android-clang/sdk/native/jni/include -I../modules/common 
-fPIC -fPIE -flax-vector-conversions -Ofast -MMD -MT 
modules/3rdparty/stlplus3/CMakeFiles/stlplus3.dir/portability_fixes.cpp.o -MF 
modules/3rdparty/stlplus3/CMakeFiles/stlplus3.dir/portability_fixes.cpp.o.d -o modules/3rdparty/stlplus3/CMakeFiles/stlplus3.dir/portability_fixes.cpp.o 
-c ../modules/3rdparty/stlplus3/portability_fixes.cpp 
../modules/3rdparty/stlplus3/portability_fixes.cpp:12:10: fatal error: 'windows.h' file not found 
#include "windows.h" 
ここ

portability_fixes.hpp

#if defined(_WIN32) || defined(_WIN64) || defined(_WIN32_WCE) 
#define MSWINDOWS 
#endif 

からそれぞれのコードは、私も

#if defined(_WIN32) && defined(ANDROID) 
#error win32 
#endif 

#if defined(_WIN64) && defined(ANDROID) 
#error win64 
#endif 

#if defined(_WIN32_WCE) && defined(ANDROID) 
#error win32_wce 
#endif 

と2を持っているし、次の番目のようなコードを追加しようとしているportability_fixes.cpp

#include "portability_fixes.hpp" 

#ifdef MSWINDOWS 
#include "windows.h" 
#endif 

からそれぞれのコードである。ここでエラーメッセージ、 "win32"と "win64"。

私はまた、... && !defined(ANDROID)を追加してこれらのマクロを回避しようとしました。しかし、その後、私はそのコードを勉強ファイルmm_malloc.h

に未定義のシンボル__mingw_aligned_mallocについてlikerエラーを持って、私は以下のことがわかりました。

static __inline__ void *__attribute__((__always_inline__, __nodebug__, 
            __malloc__)) 
_mm_malloc(size_t __size, size_t __align) 
    .... 
    void *__mallocedMemory; 
#if defined(__MINGW32__) 
    __mallocedMemory = __mingw_aligned_malloc(__size, __align); 
#elif defined(_WIN32) 
    __mallocedMemory = _aligned_malloc(__size, __align); 
#elif defined(__ANDROID__) 
    __mallocedMemory = memalign(__align, __size); 
#else 
    .... 

私が何か間違ったことをやっているようなので、それが見えます、何を理解していない。

他のプロジェクトとの互換性の問題により、スイッチングコンパイラはオプションではありません。

これらのマクロを定義解除するにはどうすればよいですか?

また、OpenCVは同じオプションでうまく構築されます。

アップデート:私はNDK r10eのx86バージョンをダウンロードしました。それは私のコードをうまくコンパイルしました。

答えて

0

NDK r10eの64ビットビルドのバグのようです。

私はx86バージョンのNDK r10eをダウンロードしました。それは私のコードをうまくコンパイルしました。

関連する問題