Ich baue ein-CMake basiertes Projekt für Android, mit NDK r10e, x86_64, Toolchain Name arm-linux-androideabi-clang3.5
Windows-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
Hierset 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.