2010-08-04 10 views
5

Wie verlinkt man mit msvcr90.dll mit mingw gcc? Ich habe versucht, -lmsvcr90, hier ist die minimale Beispiel:Wie verlinkt man gegen msvcr90.dll mit mingw gcc?

#include <stdio.h> 
int main(int argc, const char *argv[]) { 
    printf("%s\n", "hello"); 
    return 0; 
} 

Mein OS ist win7, mit mingw gcc 4.5.0

$ gcc -v 
... 
gcc version 4.5.0 (GCC) 
$ gcc hello.c -lmsvcr90 
$ a 

Dann habe ich diesen Fehler:

R6034

 
    An application has made an attempt to load the C runtime library incorrectly. 
    Please contact the application's support team for more information. 

Welchen Teil fehlt mir?

edit1:

@ user440813 Scheint mein mingw von Ihnen sehr unterschiedlich ist.

$ gcc h.c -nostdlib -lmsvcr70 -lgcc -o h.exe 
d:/mingw/bin/../lib/gcc/mingw32/4.5.0/libgcc.a(__main.o):(.text+0x5a): undefined reference to `atexit' 
d:/mingw/bin/../lib/gcc/mingw32/4.5.0/libgcc.a(__main.o):(.text+0xc2): undefined reference to `atexit' 
collect2: ld returned 1 exit status 

Dann verspottet ich int atexit (void (* function) (void)) {return 0;} und bekam R6034 wieder ...

Antwort

4

Versuchen
gcc hello.c -nostdlib -lmsvcr90 -lgcc -o hello.exe 

statt. Ich bin ein wenig überrascht, dass Ihr ursprünglicher Kompilierungsversuch erfolgreich war, da zwischen msvcr90 und msvcrt widersprüchliche Definitionen existieren sollten (die MinGW standardmäßig einbindet). Auf diese Weise msvr90 wird verknüpft, die in Konflikt stehende msvcrt nicht, aber libgcc wird hinzugefügt, um die Laufzeitbibliothek zu initialisieren.

Ich habe keine msvcr90.dll auf meinem Computer, aber ich konnte überprüfen, dass der analoge Aufruf mit msvcr100.dll funktioniert.

Verwandte Themen