Compiling C++/CX on the command line

2020-07-27 02:35发布

问题:

I get the linker error fatal error C1107: could not find assembly 'platform.winmd': please specify the assembly search path using /AI or by setting the LIBPATH environment variable when I try to compile a C++/CX program on the command line.

The error is the same after I followed the instructions on this page: https://msdn.microsoft.com/en-us/library/dn769142.aspx (to summarize: run cl /ZW /EHsc source.cpp from the Developer Command Prompt for VS2015)

I also tried running vcvarsall.bat x86 store from the Developer Command Prompt for VS2015 but I still get the same error (the same error also happens when running vcvarsall.bat x86 store from a plain command prompt).

回答1:

UPDATE: Apparently this bug has been fixed in VS2015 Update 1, I have not been able to test myself yet though.

As it turns out some command line parameters are missing from the documentation mentioned in the question, here is the full command line required to compile a small program:

cl /ZW
   /ZW:nostdlib
   /D WINAPI_FAMILY=WINAPI_FAMILY_APP
   /D __WRL_NO_DEFAULT_LIB__
   /Gm-
   /EHsc
   /MDd
   /FU"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\store\references\platform.winmd"
   /FU"C:\Program Files (x86)\Windows Kits\10\References\Windows.Foundation.FoundationContract\1.0.0.0\Windows.Foundation.FoundationContract.winmd"
   /FU"C:\Program Files (x86)\Windows Kits\10\References\Windows.Foundation.UniversalApiContract\1.0.0.0\Windows.Foundation.UniversalApiContract.winmd"
   smurf.cpp
   /link /SUBSYSTEM:CONSOLE

Where smurf.cpp contains:

using namespace Platform;

int main(Platform::Array<Platform::String^>^ args)
{
    Platform::Details::Console::WriteLine("This is a C++/CX program.");
}

Will successfully print:

C:\Users\Mikael>smurf.exe
This is a C++/CX program.