Как связать против msvcr90.dll с mingw gcc? - PullRequest
5 голосов
/ 04 августа 2010

Как связать msvcr90.dll с mingw gcc?Я попробовал -lmsvcr90, вот минимальный пример:

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

Моя ОС - win7, с mingw gcc 4.5.0

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

Затем я получил эту ошибку:

R6034

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

Какая часть мне не хватает?

edit1:

@ user440813 Кажется, мой mingw сильно отличается от вашего.

$ 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

Затем я высмеял int atexit ( void ( * function ) (void) ) {return 0;} и снова получил R6034 ...

1 Ответ

4 голосов
/ 19 декабря 2010

Попробуйте

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

вместо этого. Я немного удивлен, что ваша первоначальная попытка компиляции прошла успешно, так как между msvcr90 и msvcrt должны были быть конфликтующие определения (которые MinGW связывает по умолчанию). Таким образом, msvr90 связывается, конфликтующий msvcrt нет, но libgcc добавляется для инициализации библиотеки времени выполнения.

У меня нет msvcr90.dll на моем компьютере, но я смог проверить, работает ли аналогичный вызов с msvcr100.dll.

...