2012-02-20 19 views
7

Per favore aiuto, ho passato tutto il giorno a cercare di compilare la mia app C++.LINK: errore irreversibile LNK 1104: impossibile aprire il file "LIBCMT.lib"

Il mio progetto contiene un file sorgente: Foo.cpp. Ecco il suo codice:

#include <jni.h> 
#include <com_Foo.h> 

JNIEXPORT jint JNICALL Java_com_Foo_add 
(JNIEnv * env, jobject obj, jint x, jint y) 
{ 
    return x+y; 
} 

come si può vedere che stavo cercando di usare JNI, ma non credo che abbia a che fare con il problema. Ecco quello che ho provato sulla riga di comando:

C:\Users\michael\cworkspace\foo>cl -LD Foo.cpp -FeFoo.dll 
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 
Copyright (C) Microsoft Corporation. All rights reserved. 

Foo.cpp 
Microsoft (R) Incremental Linker Version 10.00.30319.01 
Copyright (C) Microsoft Corporation. All rights reserved. 

/dll 
/implib:Foo.lib 
/out:Foo.dll 
Foo.obj 
LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib' 

Nel mio ambiente ho impostato:

INCLUDE: C: _ \ include; C: \ frankenstein \ include; C: \ Program Files \ Java \ jdk1.6.0_24 \ include; C: \ Programmi \ Java \ jdk1.6.0_24 \ include \ win32; C: _ \ include \ win32; C: \ Programmi (x86) \ Microsoft Visual Studio 10.0 \ VC \ includere

LIBPATH: C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ lib

Ho controllato la directory lib, contiene un file "libcmt.lib". Non so se è case sensitive, ma so che non ho mai cambiato nulla nei file o nelle directory di Visual Studio.

Qualcuno potrebbe dirmi come posso farlo funzionare?

+0

BTW, questo file esiste sul mio disco: C: \ _ \ include \ com_Foo.h, la dipendenza da libcmt deve provenire indirettamente da jni.h include. – msknapp

+0

Penso che questo potrebbe derivare dal non creare il codice in Visual Studio, ma provare ad usare comunque il suo compilatore. Ho creato l'applicazione in Code :: Blocks e, quando non sono riuscito a far funzionare il compilatore g ++ MinGW32, ho provato a utilizzare il compilatore di Visual Studio. Forse presuppone una certa configurazione del progetto. È possibile che il compilatore di Visual Studio funzioni solo quando il progetto è stato realizzato in Visual Studio? – msknapp

+0

Questo è forse un thread piuttosto vecchio, ma da quando mi sono imbattuto in questo momento, ho pensato che potesse essere utile. @ La risposta di mrsheen in basso ha funzionato per me, ma ho dovuto eseguire il programma dal cmd dello sviluppatore anziché dal normale (dove l'errore persisteva). Solo una FYI per qualcuno che potrebbe ancora essere alla ricerca di questo là fuori. – prateek1592

risposta

11

Sospetto che il prompt dei comandi che si sta utilizzando per eseguire il compilatore non abbia tutte le variabili di ambiente richieste definite.

Per assicurarsi che l'ambiente della riga di comando sia configurato correttamente, assicurarsi di aver eseguito il file batch vsvars32.bat.

+0

Questo non risolve il problema. Sul mio sistema, cl non funziona se prima non eseguo vsvars32.bat. Ho comunque ricevuto l'errore. – Pillager225

+1

Questo ha risolto il mio problema! Grazie! – sibley

+1

@sibley puoi contrassegnarlo come la risposta corretta –

2

Questo ha funzionato per me quando sono arrivato ...

fatal error LNK1104: cannot open file 'LIBCMT.lib' 

il nome del progetto == “Nome del progetto” per questo esempio.

Passare alla finestra 'Explorer Solution Explorer' per il progetto.

DESTRA Fare clic sul progetto "Nome progetto", non sulla soluzione "Nome progetto".

Si aprirà un menu lungo.

Nella parte inferiore è "Proprietà" Fare clic su di esso.

Verrà aperta la finestra "Pagine proprietà" Nome progetto.

se il nome della finestra (in alto a sinistra) dice ...

“Soluzione 'Nome progetto' Pagine delle proprietà

Chiudi la finestra, è proprio cliccato sul Soluzione, non il progetto , è necessario fare clic destro sul nome del progetto.

Sul “Nome progetto” Pagine delle proprietà

riquadro a sinistra espandere Proprietà di configurazione

poi clicca su generale

Ora il pannello di destra dovrebbe mostrare il 'Generale 'Proprietà di configurazione' per il progetto corrente.

Guardate in basso l'elenco per 'piattaforma Toolset'

Se la versione di VS che si sta utilizzando non è quella elencata avevi bisogno di cambiarlo.

Per modificare la versione di VS è sufficiente posizionare il puntatore del mouse alla fine del nome della versione VS corrente visualizzata e fare clic.

Una casella con una freccia in basso verrà visualizzata sul lato destro di quella riga, fare clic su di esso.

Si aprirà una finestra con un elenco di versioni VS.

Scegli la versione di VS che stai utilizzando.

La finestra dovrebbe chiudersi e la selezione dovrebbe aver sostituito la versione VS del progetto precedente utilizzata per creare il progetto quando sono stato creato.

Poi, in fondo, di “Nome progetto” Pagine beni Fare clic su Applica , quindi OK.

Ora prova a creare il progetto.

Spero che questo aiuti, funziona per me quando si lavora su progetti che sono stati costruiti con versioni precedenti di VS.

Buona fortuna Mike.

0

Ho ottenuto questo stesso errore quando si esegue cl.exe dal prompt dei comandi dello sviluppatore per VS2012. Tutto ciò che dovevo fare era riavviare il prompt dei comandi facendo clic destro su di esso e scegliendo Esegui come amministratore.

Problemi correlati