2016-05-06 11 views
0

Ich baue ein-CMake basiertes Projekt für Android, mit NDK r10e, x86_64, Toolchain Name arm-linux-androideabi-clang3.5Windows-Makros in Klirren 3.5, NDK r10e, CMake

Derzeit ist ich bin immer sehr seltsame Fehler, dass einige darauf hindeutet, Windows-Präprozessor-Makros kommen heraus, wie _WIN32, _WIN64, __MINGW32__.

Mein Projekt verwendet Teile von stlplus3, Version 3-03-11, insbesondere filesystem

ich CMake Android Werkzeugkette von https://github.com/taka-no-me/android-cmake (diese Werkzeugkette in OpenCV verwendet wird)

Hier ist CMake Anruf

Hier
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" 

ist der Compiler Ausgabe:

[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" 

Hier ist der jeweilige Code aus portability_fixes.hpp

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

Hier ist der jeweilige Code ist aus portability_fixes.cpp

#include "portability_fixes.hpp" 

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

ich auch Code versucht haben, das Hinzufügen wie th folgende

#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 

Und haben zwei bekam Fehlermeldungen, "win32" und "win64".

Ich habe auch versucht, um diese Makros zu arbeiten, ... && !defined(ANDROID) hinzufügen. Aber dann habe ich einen liker Fehler zu undefinierten Symbol bekam __mingw_aligned_malloc in Datei mm_malloc.h

seinen Code studieren, habe ich festgestellt folgendes:

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 
    .... 

So sieht es aus wie ich etwas falsch tue, aber verstehe nicht was.

Switching Compiler ist keine Option, wegen Kompatibilitätsproblemen mit anderen Projekten.

Also wie mache ich den Compiler, diese Makros zu definieren?

Auch OpenCV baut gut mit den gleichen Optionen.

Update: Ich habe x86-Version von NDK R10e heruntergeladen und es hat meinen Code in Ordnung.

Antwort

0

Sieht aus wie Bugs in 64-Bit-Build von NDK R10e.

Ich habe x86-Version von NDK R10e heruntergeladen und es hat meinen Code in Ordnung.