0
에서 정의되지 않은 나는 매크로 _GLIBCXX_ATOMIC_BUILTINS_GLIBCXX_ATOMIC_BUILTINS 내가 포팅하고있어 일부 코드가 GCC 4.4.5
는 GCC의 이후 버전이 정의하지 마십시오 누락 오류를 추적 한?
이 문제를 해결하는 적절한 방법은 무엇입니까? 해당 버전에서
에서 정의되지 않은 나는 매크로 _GLIBCXX_ATOMIC_BUILTINS_GLIBCXX_ATOMIC_BUILTINS 내가 포팅하고있어 일부 코드가 GCC 4.4.5
는 GCC의 이후 버전이 정의하지 마십시오 누락 오류를 추적 한?
이 문제를 해결하는 적절한 방법은 무엇입니까? 해당 버전에서
당신이 할 수 있도록 당신은 또한, 일부 특정 데이터 유형에 대한 원자 매크로를 확인하는 것이 좋습니다 :
#if defined(_GLIBCXX_ATOMIC_BUILTINS_4) && !defined(_GLIBCXX_ATOMIC_BUILTINS)
#define _GLIBCXX_ATOMIC_BUILTINS
#endif
또는
#if defined(_GLIBCXX_ATOMIC_BUILTINS) || defined(_GLIBCXX_ATOMIC_BUILTINS_4)
매크로
은 다음과 같습니다/* Define if builtin atomic operations for bool are supported on this host. */
#undef _GLIBCXX_ATOMIC_BUILTINS_1
/* Define if builtin atomic operations for short are supported on this host. */
#undef _GLIBCXX_ATOMIC_BUILTINS_2
/* Define if builtin atomic operations for int are supported on this host. */
#undef _GLIBCXX_ATOMIC_BUILTINS_4
/* Define if builtin atomic operations for long long are supported on this
host. */
#undef _GLIBCXX_ATOMIC_BUILTINS_8
작동하지 않는 것 같습니다. -dM 출력을 살펴 보았고 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1, _2, _4 & _8을 정의했습니다. – Matt
libstdC++가 i386 용으로 컴파일 된 경우 _GLIBCXX_ATOMIC_BUILTINS_N이'bits/C++ config.h'에 정의되어 있지 않습니다 (설치시 설정 됨). 그것은 -march = i686 (또는> = 486)으로 컴파일해야 할 필요가있었습니다. _GLIBCXX_ATOMIC_BUILTINS_N과 _GCC_HAVE_SYNC_COMPARE_AND_SWAP_N이 모두 정의되지 않은 경우에도 물론 원자 연산을 지원할 수 있습니다. 타겟이'__sync_val_compare_and_swap'을 지원하는지 확인하는 가장 좋은 방법은 [autoconf] (http://www.gnu.org/software/autoconf/) 또는 [atomic_types.h] (http : //)에있는 조건부 전처리기를 사용하는 것입니다. ftp.iptel.org/pub/sems/doc/current/atomic__types_8h_source.html) – jspcal