簡體   English   中英

編譯器忽略#define _GNU_SOURCE

[英]Compiler ignores #define _GNU_SOURCE

  • 我不是母語為英語的人,所以請原諒任何拼寫錯誤或語法錯誤
    • 我不是編譯專家,也沒有任何有關構建及其錯誤的有用經驗
    • 我是C#程序員,主要在MS環境中工作
    • 我只知道3 “必須知道在Linux命令中存活” “./configure,make&make install”來自我的小Linux體驗

我的發展環境

  • 我正在使用Windows 7工作站
    用Cygwin和MinGW(作為Linux'Replacement')編譯。

問題

我想在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);

我想要實現和了解的內容:

  • 我想編譯下面命名的API的整個源代碼,以在Windows操作系統上使用二進制文件。
  • 另外我想知道,我是否寫了“#define _GNU_SOURCE”-Tag
    到了正確的地方,或者我犯了錯誤。

下載:

API
https://software.ecmwf.int/wiki/display/GRIB/Home

如果您要聲明功能測試宏(如_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.

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