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등의 다른 시스템에는 없는 경우가 있습니다.
이 숫자는 다른 버전의 표준을 참조합니다.
- 500 - X/Open 5 (POSIX 1995 포함)
- 600 - X/Open 6 (POSIX 2004 포함)
- 700 - X/Open 7 (POSIX 2008 포함)
호출하는 각 기능의 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)을 사용합니다.
다음 항목도 참조하십시오.
- Linux: -std=c99를 사용하는 gcc에서 구조 시간 사양을 알 수 없다는 불만이 제기됩니다.
- glibc 기능 테스트 매크로
- 컴파일 환경 - Open Group Base Specification 제6호(X/Open 6호)
- POSIX - 위키백과
- 단일 UNIX 사양 - Wikipedia
-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
'programing' 카테고리의 다른 글
여기 뭐가 문제인지 알 수가 없어요 (0) | 2022.09.09 |
---|---|
MariaDB - 주문이 있는 그룹화 기준 (0) | 2022.09.08 |
C에서의 화살표 연산자(->) 사용법 (0) | 2022.08.25 |
Vue 라우터 및 Cordova(Vue.js) (0) | 2022.08.25 |
Vue 3 라우터는 부모 뷰에 후행 슬래시를 추가하지 않으므로 기본 자식 vue 컴포넌트를 렌더링하지 않습니다. (0) | 2022.08.25 |