2011-10-12 10 views
8

Sto cercando di compilare il seguente programma:Scopo del --enable-auto-import Attenzione

#include <iostream> 
int main(){ 
    std::cout << "Hello, world!"; 
    return 0; 
} 

Quando compilo esso, ottengo questo messaggio:

C:\programs>g++ test.cpp 
Info: resolving std::cout by linking to __imp___ZSt4cout (auto-import) 
c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: warning: a 
uto-importing has been activated without --enable-auto-import specified on the c 
ommand line. 
This should work unless it involves constant data structures referencing symbols 
from auto-imported DLLs. 

La build riesce e l'eseguibile funziona come previsto, ma questo avviso mi irrita ancora. Mi aspetto che una build di successo sia completamente silenziosa. Questo messaggio dà la falsa impressione che c'è qualcosa di sbagliato nel mio codice.

Posso disattivare questo errore con g++ -Xlinker --enable-auto-import test.cpp, ma questo non è consigliabile, in quanto triplica il numero di caratteri che devo digitare per compilare un programma.

Domande:

  • Perché appare questo avvertimento per il più semplice dei programmi? Non mi aspetto avvertimenti criptici quando compilo Hello World.
  • È possibile disattivare questo avviso senza passare la flag al linker ogni volta? Un'opzione in un file di configurazione nascosto da qualche parte in c:\mingw, forse? O forse ho perso una casella di controllo "abilita automaticamente l'importazione automatica" durante l'installazione?

Spec Forse rilevanti

  • GCC versione 4.5.0
  • ld.exe Versione 2.20.51.20100613
  • Windows XP Service Pack 3
+0

utilizzare un Makefile. –

risposta

4

ho fatto qualche lettura e sembra che potrebbe essere correlato alla dll mingw32 che non ha definito gli attributi dllimport.

Forse c'è una patch o è possibile ricostruire il mingw32 da soli e aggiungerli?

+1

Ho fatto delle ricerche da solo, e sono d'accordo con te. [Here] (http://sourceware.org/ml/binutils/2009-02/msg00341.html) è una discussione dal newsgroup di binutils sul motivo per cui appare l'errore (penso che sia troppo tecnico per me). [Questo] (http://sourceware.org/ml/binutils-cvs/2009-06/msg00121.html) sembra essere il registro delle modifiche in cui vengono applicate in modo che "--enable-auto-import" venga passato automaticamente. Non sono sicuro se stavo usando un linker di 2 anni, ma ho reinstallato MinGW e l'avviso è sparito. – Kevin

6

Ero solito affrontare lo stesso problema riscontrato con lo g++. Ho risolto questo problema irritante proprio ora. Ecco come vengo alla soluzione, passo dopo passo:

Su Windows, è possibile creare un alias di g++ con tutte le opzioni fornite che si desidera utilizzare con g++. Diciamo, per esempio, si desidera creare un alias s++ di g++ -enable-auto-import, quindi si esegue questo su cmd come:

C:\>doskey s++=g++ -enable-auto-import 

Questo crea un alias chiamato s++.Ma questo alias non avrà alcun argomento della riga di comando, il che significa, non è possibile scrivere questo:

C:\>s++ filename.cpp //it is not working 

Per farlo funzionare, se hai a dire l'alias di accettare argomenti della riga di comando durante la sua creazione, ecco è come è fatto:

C:\>doskey s++=g++ -enable-auto-import $* 

si prega di notare l'$* a destra, che indica che la società può prendere s++ argomento della riga di comando:

C:\>s++ filename.cpp //yayyyy..its working now, without giving any warnings! 

Ma potresti non preferire creare l'alias ogni volta che apri cmd. In tal caso, puoi creare una scorciatoia di cmd.

Per esempio, ho creato un collegamento denominato Console e nel Target testo della finestra di scelta rapida, ho scritto questo:

C:\WINDOWS\System32\cmd.exe /K doskey s++=g++ -enable-auto-import $* 

E poiché questo è troppo lungo (in orizzontale), uno screenshot non è stato in grado di catturare l'intero comando. Ho preso due screenshot in modo che si poteva vedere voi stessi come ho fatto:

  • parte sinistra del comando

    Left part of the command

  • parte destra del comando

    Right part of the command

Per maggiori informazioni ormazione sulla creazione di alias sulle finestre, vedere questo:

+0

Alcuni sistemi di build non avviano il processo tramite la shell. –