Ich arbeite an einer grundlegenden Makefile-Datei zum Testen der Kompilierung unserer Quellen für alternative Microsoft-Umgebungen wie Windows Phone. Ich öffnete eine AR2012 ARM Developer Eingabeaufforderung und lief nmake
auf dem Makefile. Es ergab:Warum versucht ARMs cl.exe, x86 oder x64 App von ARM Developer Command Line zu erstellen?
nmake /f makefile.namke
...
cl /c cryptlib.cpp cpu.cpp...
cryptlib.cpp
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\crtdefs.h(338):
fatal error C1189: #error: Compiling Desktop applications for the ARM platform is not supported.
cpu.cpp
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\crtdefs.h(338):
fatal error C1189: #error: Compiling Desktop applications for the ARM platform is not supported.
...
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0
\VC\BIN\x86_ARM\cl.EXE"' : return code '0x2'
Stop.
"Desktop-Anwendungen" ist ein bisschen zweideutig, so suchte ich Microsoft für die Bedeutung des Begriffs. Es scheint, dass die Toolchain x86 oder x64 Metro UI-basierte Anwendungen erstellt.
Ich fühle mich wie ich eine Trennung erleiden, oder Microsoft leidet eine Trennung und ihre Werkzeuge sind fehlerhaft.
Warum versucht Microsofts ARM-Version von cl.exe, eine x86- oder x64-Anwendung zu erstellen, statt für ARM zu kompilieren? Oder warum stellt die Eingabeaufforderung des VS2012 ARM-Entwicklers eine x86- oder x64-Anwendung auf?
Ich habe auch versucht, das Problem zu beheben, aber die vorgeschlagenen Lösungen funktionieren nicht. Jetzt versuche ich zu verstehen, was auf den höchsten Ebenen vor sich geht.
Zum Beispiel, one answer sagt, um <WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
zu einem ARM-Eigenschaftsblatt hinzuzufügen, aber das hat nicht funktioniert. Another answer sagt zu CXXFLAGS = /D _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE
hinzufügen, aber das hat auch nicht funktioniert.
Das Makefile ist so einfach wie es nur geht, um die Kompilierung unter Microsofts ARM-Toolchain zu testen.
LIB_SRCS = cryptlib.cpp cpu.cpp ...
LIB_OBJS = cryptlib.obj cpu.obj ...
TEST_SRCS = test.cpp bench1.cpp bench2.cpp ...
TEST_OBJS = test.obj bench1.obj bench2.obj ...
CXX = cl.exe /nologo
AR = lib.exe
CXXFLAGS =
all: cryptest.exe
cryptest.exe: $(TEST_OBJS) cryplib.lib
$(CXX) $(CXXFLAGS) /ref:cryplib.lib /out:[email protected] $(TEST_SRCS)
cryplib.lib : $(LIB_OBJS)
$(CXX) $(CXXFLAGS) $(LIB_SRCS)
$(AR) $(LIB_OBJS)
_ "...füge 'CXXFLAGS =/D _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE' hinzu, aber das hat auch nicht funktioniert." _ - meinst du das wörtlich oder definierst es auf etwas ungleich Null? Zeile 337 dieses Headers prüft seinen Wert, nicht nur seine Existenz. Vermutlich diese cpp Dateien verwenden einige der Win32-APIs, die willkürlich auf ARM nicht zugelassen sind In jeder Instanz, die mir begegnet, bezieht sich "Desktop" immer auf veraltetes Win32, dh nicht WinRT oder UWP. – Notlikethat