6

Ho una domanda, che attualmente non riesco ad affrontare in modo efficace poiché non ho ancora familiarità con lo sviluppo delle app Metro. Quindi per favore portami con me :)simboli non risolti dopo aver convertito la soluzione Windows 8 Metro VS2012 in VS2013 (su Windows 8.1)

Per farla breve, ho una grande e complessa app VS2012 Metro gestita + soluzione nativa (attualmente basata su Windows 8) in VS2013 per Windows 8.1.

Ho importato la soluzione in VS2013 (ospitato su Windows 8.1) ed eseguito la conversione per esso e tutti i progetti secondari in esso. Stuff compilare, ma è con il linker che ci imbattiamo in problemi. Questo è un esempio degli errori di linker otteniamo:

error LNK2019: unresolved external symbol __imp___beginthreadex referenced in function <blahblahblah> 
    error LNK2019: unresolved external symbol __imp___mbsrchr referenced in function <blahblahblah> 
    error LNK2019: unresolved external symbol _getenv referenced in function <blahblahblah> 
    error LNK2019: unresolved external symbol __imp___beginthreadex referenced in function <blahblahblah> 
    error LNK2019: unresolved external symbol __imp___endthreadex referenced in function <blahblahblah> 
    error LNK2019: unresolved external symbol __imp___mbsrchr referenced in function <blahblahblah> 
    error LNK2019: unresolved external symbol __imp___mbsnbicmp referenced in function <blahblahblah> 
    error LNK2019: unresolved external symbol __imp___dupenv_s referenced in function <blahblahblah> 

Il fatto è che per ogni singolo simbolo che viene 'manca', possiamo vedere la che la dichiarazione è presente nei file di intestazione MS Windows fornite con VS2013 . Ispezionare i riferimenti in ogni sottoprogetto mostra che stanno facendo riferimento alle librerie 'core' di Windows.

Qualche idea del perché questo sta accadendo? Grazie.

+0

Una cosa da notare è che in Visual Studio 2012 i file di librerie CRT utilizzati per tutte le app si trovavano in Programmi (x86) \ Microsoft Visual Studio 11.0 \ VC \ lib mentre Visual Studio 2013, i file di librerie CRT utilizzati per Le app "Metro" (o Store) sono separate e si trovano in C: \ Programmi (x86) \ Microsoft Visual Studio 12.0 \ VC \ lib \ store. Assicurati di collegare a quelli giusti. –

risposta

2

possiamo vedere che la dichiarazione è presente nei file di intestazione di MS Windows forniti con VS2013. Controllo i riferimenti in ogni sotto-progetto dimostra che essi sono riferimenti librerie 'core' di Windows

Si sta per essere difficile da diagnosticare che cosa è andato storto con questo poche informazioni, ma è abbastanza chiaro che si sta cercando nell'angolo completamente sbagliato per questo problema. I simboli mancanti sono non Funzioni di Windows api, sono funzioni di supporto di runtime C. Sono solo utilizzati in un progetto C++, hai guardato a progetti .NET.

Quindi è necessario concentrarsi su un progetto che genera questi errori di linker, è un progetto C++. Il comando linker che viene emesso per ottenere il collegamento al .lib che ha questi simboli è completamente automatico, quindi non c'è molto che possa andare storto. La prima cosa da fare è forzare una ricostruzione completa in modo che non utilizzi i file .obj e .lib obsoleti che sono stati lasciati da una build precedente in VS2012. Fare clic con il tasto destro del mouse sul progetto e scegliere Ricostruisci.

E vale la pena dare un'occhiata a file .vcxproj per questo progetto con un editor di testo (come Blocco note) e assicurarsi che la conversione è andato bene e ha fatto le modifiche corrette:

  • la proprietà deve ToolsVersion essere cambiato da "4.0" a "12,0"
  • la proprietà MinimumVisualStudioVersion deve essere cambiato 11,0-12,0
  • due nuove proprietà vengono aggiunti, ApplicationType (Windows Store) e ApplicationTypeRevision (8.1)
  • Platfor di ogni configurazione Proprietà mToolset deve essere modificato da v110 a v120

C'è un file di registro nella directory denominata Debug\projectname.tlog link.read.1.tlog che contiene la diagnostica, mostra tutti i file .lib che il linker utilizza. Deve contenere questa riga:

C: \ FILE PROGRAMMI (X86) \ MICROSOFT VISUAL STUDIO 12.0 \ VC \ LIB \ STORE \ VCCORLIBD.LIB

Qual è il file .lib che contiene questi simboli.

+0

Grazie Hans. Questo mi ha sicuramente dato una direzione con cui risolvere questo problema. Vediamo quanto riesco a trovare da questo punto in avanti. Grazie mille. –

+0

Bella soluzione. Ehi, puoi aiutarmi con questo problema? http://stackoverflow.com/questions/20708957/c-sharp-metro-xaml-designing-the-page-for-any-of-the-screen – TheQuestioner