簡體   English   中英

在Linux上使用MinGW編譯適用於Windows的Gnu11

[英]Compiling Gnu11 for Windows with MinGW on Linux

我有一個C程序; 它編譯並鏈接gcc -std=gnu11 iter.c -o iter因為我正在使用一些GNU string.h擴展,如strndupstrnlenstrsep

我想在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編譯程序?

正如評論中所討論的,盡管MinGW提供了許多GNU程序,包括GCC,但它並沒有提供GNU C庫。 GCC為MinGW環境構建的C程序依賴於Microsoft的C運行時庫。 他們可以使用GNU 語言擴展,但通常不使用Microsoft也不實現的GNU 擴展。 另一方面,他們可以依賴GNU未實現的Microsoft庫擴展,盡管他們可能需要提供自己的頭文件。

如果你的程序依賴於目標環境中可能有或沒有的函數(例如Windows / MinGW),那么通常的方法是使用條件編譯指令和宏來代替那些不提供的目標的構建中的函數替代他們。 根據具體功能,這可能意味着您有條件地提供自己的實現。

如何將條件編譯集成到構建系統中是一個更廣泛的問題。 如果您使用的是Autotools,那么這類設備就屬於其核心功能。 您可以使用CMake,也可以與大多數其他流行系統類似。 如果您使用的是手工制作的構建系統,那么您當然有自由和義務來提出自己的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM