Ich habe ein C-Programm; Es kompiliert und verbindet sich mit gcc -std=gnu11 iter.c -o iter
, weil ich einige GNU string.h
Erweiterungen wie strndup
, strnlen
und strsep
verwende.Kompilieren von Gnu11 für Windows mit MinGW unter Linux
Ich möchte dieses Programm für Windows mit dem Paket i686-w64-mingw32-gcc
auf Ubuntu Linux kompilieren.
$ 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
Ich habe alle erforderlichen MinGW Laufzeit und Bibliotheken installiert, aber MinGW scheint die -std=gnu11
Richtlinie zu ignorieren. Es ignoriert die Option nicht vollständig, weil -std=asdf
"unerkannt" ist, aber es ablehnt, GNU C zu kompilieren.
Gibt es eine Möglichkeit, dass ich ein Programm, das GNU-Erweiterungen verwendet, für Windows kompilieren kann?
Wenn Sie ein Programm kompilieren, das auf der C-Laufzeitbibliothek von Microsoft beruht, wie dies bei MinGWin-Programmen der Fall ist, sind Sie auf die Funktionen dieser Bibliothek beschränkt. Sie sollten dankbar sein, dass der Compiler Ihnen davon erzählt, anstatt ein Programm zu erstellen, das zum Absturz gebracht werden soll. –
@JohnBollinger ist nicht MinGW "Minimalist GNU für Windows"? In der Tat, es ist ** GCC ** und GNU's LibC mit GCC verbunden, so würde man erwarten, dass die Header GNU sind. – cat
MinGW bietet viele GNU * -Programme *, einschließlich GCC, die nativ unter Windows laufen. Es stellt die GNU C-Bibliothek * nicht * zur Verfügung und stützt sich stattdessen auf Microsoft. Es stützt sich auch auf andere Windows-Systembibliotheken. Dies ist eindeutig [dokumentiert] (http://www.mingw.org/), und es macht Sinn. –