CPU 아키텍처 컴파일 시간 감지
C 또는 C ++ 코드를 컴파일 할 때 CPU 아키텍처를 찾는 가장 안정적인 방법은 무엇입니까? 지금까지 내가 말할 수있는, 서로 다른 컴파일러 (비 표준 처리기 정의의 자신의 세트가 _M_X86
MSVS에서 __i386__
, __arm__
GCC에서, 등).
내가 구축중인 아키텍처를 감지 하는 표준 방법이 있습니까? 그렇지 않다면 모든 상용구가있는 헤더와 같이 다양한 컴파일러에 대한 이러한 정의의 포괄적 인 목록에 대한 소스가 #ifdef
있습니까?
다음은 사전 정의 된 아키텍처 매크로 및 기타 유형의 사전 정의 된 매크로에 대한 정보입니다.
이 질문 은 GCC 소스 코드에서 정의 된 위치를 묻습니다 .
컴파일러 간 표준은 없지만 각 컴파일러는 매우 일관된 경향이 있습니다. 다음과 같은 헤더를 직접 작성할 수 있습니다.
#if MSVC
#ifdef _M_X86
#define ARCH_X86
#endif
#endif
#if GCC
#ifdef __i386__
#define ARCH_X86
#endif
#endif
수천 개의 컴파일러가 있지만 널리 사용되는 3-4 개 (Microsoft C ++, GCC, Intel CC, 아마도 TenDRA?)가 있기 때문에 포괄적 인 목록에 대한 의미는별로 없습니다. 애플리케이션에서 지원할 컴파일러를 결정하고 #defines를 나열하고 필요에 따라 헤더를 업데이트하기 만하면됩니다.
특정 플랫폼에서 사용 가능한 모든 기능을 덤프하려면 다음과 같이 GCC를 실행할 수 있습니다.
gcc -march=native -dM -E - </dev/null
이 같은 매크로 덤프 것 #define __SSE3__ 1
, #define __AES__ 1
등
크로스 컴파일러 솔루션을 원한다면 다음 Boost.Predef
을 포함 하는 것을 사용하십시오.
BOOST_ARCH_
시스템 / CPU 아키텍처의 경우 하나가 컴파일됩니다.BOOST_COMP_
컴파일러의 경우 사용하고 있습니다.BOOST_LANG_
언어 표준을 위해 컴파일하고 있습니다.BOOST_LIB_C_
사용중인 C 및 C ++ 표준 라이브러리의 경우 BOOST_LIB_STD_.BOOST_OS_
우리가 컴파일하는 운영 체제를 위해.BOOST_PLAT_
운영 체제 또는 컴파일러 위에있는 플랫폼 용.BOOST_ENDIAN_
OS와 아키텍처 조합의 엔디안을 위해.BOOST_HW_
하드웨어 특정 기능.BOOST_HW_SIMD
SIMD (Single Instruction Multiple Data) 감지 용.
예를 들면
#if defined(BOOST_ARCH_X86)
#if BOOST_ARCH_X86_64
std::cout << "x86_64 " << BOOST_ARCH_X86_64 << " \n";
#elif BOOST_ARCH_X86_32
std::cout << "x86 " << BOOST_ARCH_X86_32 << " \n";
#endif
#elif defined(BOOST_ARCH_ARM)
#if _M_ARM
std::cout << "ARM " << _M_ARM << " \n";
#elif _M_ARM64
std::cout << "ARM64 " << _M_ARM64 << " \n";
#endif
#endif
여기 에서 사용 방법에 대해 자세히 알아볼 수 있습니다.
표준은 없습니다. Brian Hook은 그의 "Portable Open Source Harness"에서 이것들을 문서화했으며, 심지어 그것들을 일관되고 사용 가능한 것으로 만들려고 시도합니다. 이 사이트의 posh.h 헤더를 참조하십시오.
위의 링크는 얼마 전 DOS 공격으로 인해 가짜 사용자 ID / 암호를 입력해야 할 수도 있습니다.
If you need a fine-grained detection of CPU features, the best approach is to ship also a CPUID program which outputs to stdout or some "cpu_config.h" file the set of features supported by the CPU. Then you integrate that program with your build process.
참고URL : https://stackoverflow.com/questions/152016/detecting-cpu-architecture-compile-time
'developer tip' 카테고리의 다른 글
Git 서브 모듈의 대안? (0) | 2020.10.17 |
---|---|
자바 스크립트. (0) | 2020.10.17 |
Dumpbin.exe를 찾을 수 없습니다 (0) | 2020.10.16 |
Python으로 웹 사이트에 로그인하려면 어떻게해야합니까? (0) | 2020.10.16 |
고정 너비 파일을 효율적으로 구문 분석하는 방법은 무엇입니까? (0) | 2020.10.16 |