[英]Compiler ignores #define _GNU_SOURCE
我想在Windows上編譯C源代碼 ,這是為Linux發行版編寫的主要代碼 。
/配置工作沒有問題。
如果我使用命令make來編譯源代碼,我會遇到以下錯誤:
錯誤
grib_keys.c:50:34:
錯誤:'alphasort'未聲明(首次使用此功能)
我的研究證明了我,這個問題已經解決了,
但不幸的是,答案對我不起作用。
隱含的scandir聲明; alphasort未聲明
http://ubuntuforums.org/archive/index.php/t-1653576.html
解決方案說,我只需要包括以下內容: #define _GNU_SOURCE
我嘗試過,但正如已經說過的那樣,它不起作用。
我把它包含在以下文件中:
- grib_keys.c
- config.h
並試圖用並發和非並發包含來編譯它們。
最后,文件的重要部分如下所示:
config.h
********
/* Add #define _GNU_SOURCE to solve "'alphasort' undeclared" error */
#define _GNU_SOURCE
grib_keys.c
***********
#define _GNU_SOURCE
count = scandir(dir, &files, 0, alphasort);
如果您要聲明功能測試宏(如_GNU_SOURCE
,則必須確保預處理器在看到使用它們的任何代碼之前看到它們。 這通常意味着必須在任何系統標頭之前處理它們。 因此,在任何#include
指令之前,最佳位置位於每個C源文件(不是標題)的頂部。
話雖如此,您需要一個適用於您實際使用的C庫及其開發標題的解決方案。 對於MinGW,它似乎是微軟的C庫,它似乎沒有記錄alphasort()
函數。
即使您使用glibc(例如Cygwin的版本),我的glibc文檔聲稱alphasort()
所需的功能測試宏是_BSD_SOURCE
或_SVID_SOURCE
,而不是_GNU_SOURCE
。 從glibc 2.10開始,看起來最好使用_POSIX_C_SOURCE
> = 200809L
,或_XOPEN_SOURCE
> = 700
,因為這些反映了函數在POSIX.1-2008中標准化的事實。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.