programing

D_XOPEN_SOURCE는 무엇을 의미합니까?

minecode 2022. 8. 25. 23:36
반응형

D_XOPEN_SOURCE는 무엇을 의미합니까?

이 arg가 없으면 gcc가 컴파일할 수 없는 코드를 최근에 발견했습니다.gcc man 페이지를 확인했지만 이 옵션을 찾을 수 없었습니다.찾았다XOPEN_SOURCE, 그러나 그것이 하는 일에 대한 설명은 거의 없었다.

누가 좀 자세히 설명해 주시겠어요?알고있어요-D_XOPEN_SOURCE다음과 같이 다양한 값으로 설정할 수 있습니다.400,600근데 그게 무슨 의미가 있죠?

할 때

#define _XOPEN_SOURCE <some number>

또는

cc -D_XOPEN_SOURCE=<some number>

X/Open 및 POSIX 표준에 정의된 일부 추가 함수에 대한 정의를 포함하도록 컴파일러에 지시합니다.

이것에 의해, 최신의 UNIX/BSD/Linux 시스템에 존재하는 몇개의 추가 기능이 제공되고 있습니다만, Windows등의 다른 시스템에는 없는 경우가 있습니다.

이 숫자는 다른 버전의 표준을 참조합니다.

호출하는 각 기능의 man 페이지를 보면 어떤 기능이 필요한지 알 수 있습니다.

예를들면,man strdup다음과 같이 말합니다.

   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500
       strndup(), strdupa(), strndupa(): _GNU_SOURCE

즉, 다음 중 하나를 넣어야 합니다.

#define _SVID_SOURCE
#define _BSD_SOURCE
#define _XOPEN_SOURCE 500
#define _XOPEN_SOURCE 600
#define _XOPEN_SOURCE 700

작업을 수행하기 전에 소스 파일의 맨 위에#include를 사용하고 싶은 경우strdup.

아니면...

#define _GNU_SOURCE

대신 Solaris, FreeBSD, Mac OS X 등에서는 컴파일되지 않는 단점이 있지만 모든 기능을 사용할 수 있습니다.

각 man 페이지를 체크한 후 작업을 수행하는 것이 좋습니다.#include,#define또는 새로운 기능을 사용할 수도 있습니다.왜냐하면 어떤 옵션과 옵션에 따라 동작이 변경될 수 있기 때문입니다.#define예를 들어 basname(3)을 사용합니다.

다음 항목도 참조하십시오.

-D는 프리프로세서 변수를 정의하는 c 컴파일러 옵션입니다.이 경우_XOPEN_SOURCE.

이것은 실제로 컴파일러 자체의 동작에 영향을 주는 것이 아니라 표준 c 라이브러리 등의 일부 라이브러리의 동작을 변화시킵니다.이와 같은 옵션은 여러 가지가 있습니다.대부분의 경우 UNIX 고유의 프로그래밍 인터페이스 또는 특정 라이브러리 벤더에 관한 표준 문서와 관련되어 있습니다.

일부 표준 함수 또는 그 시그니처의 동작이 표준마다 다를 수 있기 때문에 이들 중 하나를 정의할 필요가 있는 경우가 있습니다. 때문에 '어울리지 않다'를 할 도 있어요.-D_XOPEN_SOURCE또는 호환성 모드를 켜는 것과 유사한 기능을 사용합니다.

이러한 플래그를 사용할 수 있는 또 다른 방법은 C 라이브러리 구현에서 제공되는 확장자를 켜서 소스 코드가 특정 표준의 제한 범위 내에 있도록 하는 것입니다.이는 코드가 가능한 한 많은 플랫폼에서 실행되도록 하기 위해 사용할 수 있는 조치 중 하나입니다.

이로 인해 헤더는 posix와 같은 특정 노름의 정의에 속하게 됩니다.이것이 속하는 실제 규범은 값에 의해 정의됩니다(예를 들어 400 또는 600).표준/값 바인딩에 대해서는 이 참조를 참조하십시오.

어떤 이유로 Mac OS/X(XCode)가 strdup()를 정의하기 위해서는 1995년 사양이지만 600이 필요합니다.Mozilla와 다른 사람들은 이런 상황에 직면했습니다...

언급URL : https://stackoverflow.com/questions/5378778/what-does-d-xopen-source-do-mean

반응형