私はCプログラムを持っています。 、strnlen
、strsep
のようなGNU string.h
という拡張子を使用しているため、コンパイルしてgcc -std=gnu11 iter.c -o iter
とリンクしています。LinuxでMinGWを使ってGnu11をコンパイルする
私はUbuntu Linuxのパッケージi686-w64-mingw32-gcc
を使ってこのプログラムをWindows用にコンパイルしたいと思っています。
$ 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でクロスコンパイルできる方法はありますか?
MinGWinプログラムのように、MicrosoftのCランタイムライブラリに依存するプログラムをコンパイルする場合は、そのライブラリが提供する機能に限定されます。実行時にクラッシュする予定のプログラムをビルドするのではなく、コンパイラがこれについてあなたに伝えることに感謝しています。 –
@JohnBollinger MinGWの「Minimalist GNU for Windows」はありませんか?確かに、それは** GCC **であり、GNUのLibCはGCCとリンクしているので、ヘッダーはGNUであると予想されます。 – cat
MinGWは、Windows上でネイティブに動作するGCCを含む多くのGNU *プログラム*を提供しています。代わりにMicrosoftのものに頼ってGNU Cライブラリを提供していません。他のWindowsシステムライブラリにも依存しています。これは明らかに[文書化されている](http://www.mingw.org/)であり、意味があります。 –