我有一個C程序;它編譯並鏈接到gcc -std=gnu11 iter.c -o iter
,因爲我正在使用一些GNU string.h
擴展名,如strndup
,strnlen
和strsep
。在Linux上用MinGW編譯Gnu11 for Windows
我想在Ubuntu Linux上使用軟件包i686-w64-mingw32-gcc
來編譯該程序。
$ i686-w64-mingw32-gcc -std=gnu11 iter.c -o iter32.exe
In file included from iter.c:1:0:
iter.h: In function ‘str_chomp’:
iter.h:166:15: warning: implicit declaration of function ‘strndup’ [-Wimplicit-function-declaration]
char* new = strndup(str, MAX_STR_LEN);
^
iter.h:166:15: warning: incompatible implicit declaration of built-in function ‘strndup’
iter.h: In function ‘str_split’:
iter.h:189:19: warning: incompatible implicit declaration of built-in function ‘strndup’
*str_copy = strndup(str, MAX_STR_LEN);
^
iter.h:211:26: warning: implicit declaration of function ‘strsep’ [-Wimplicit-function-declaration]
for (i = 0; (token = strsep(&str_copy, delim_str)) != NULL; i++) {
^
iter.h:211:24: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
for (i = 0; (token = strsep(&str_copy, delim_str)) != NULL; i++) {
^
/tmp/ccPH0nG5.o:iter.c:(.text+0x216): undefined reference to `strndup'
/tmp/ccPH0nG5.o:iter.c:(.text+0x2bf): undefined reference to `strndup'
/tmp/ccPH0nG5.o:iter.c:(.text+0x3a7): undefined reference to `strsep'
collect2: error: ld returned 1 exit status
我已經安裝了所有必需的MinGW運行時和庫,但MinGW的似乎忽視了-std=gnu11
指令。它並不完全忽略該選項,因爲-std=asdf
是「無法識別的」,但它拒絕交叉編譯GNU C.
有沒有一種方法可以使用GNU擴展程序爲Windows交叉編譯?
如果您正在編譯一個依賴Microsoft C運行時庫的程序,就像MinGWin程序一樣,那麼您僅限於該庫提供的函數。你應該感謝編譯器告訴你這個,而不是在運行時創建一個註定要崩潰的程序。 –
@JohnBollinger不是MinGW「Windows簡約GNU」嗎?事實上,它是** GCC **,並且GNU的LibC與GCC鏈接,所以人們會認爲這些標頭是GNU。 – cat
MinGW提供了許多GNU *程序*,包括GCC,在Windows上本地運行。它不*提供GNU C庫,而是依靠微軟的。它也依賴於其他一些Windows系統庫。這顯然是[記錄](http://www.mingw.org/),它是有道理的。 –