피드로 돌아가기
C 확장, 이식성, 대체 컴파일러에 관하여
GeekNewsGeekNews
Infrastructure

C 확장, 이식성, 대체 컴파일러에 관하여

glibc의 컴파일러 의존적 Attribute 설계로 인한 이식성 저해 분석

neo2026년 5월 26일2advanced

Context

글로벌 표준 라이브러리인 glibc가 GCC 전용 __attribute__를 과도하게 사용하여 타 컴파일러와의 호환성이 결여된 상태임. 특히 sys/cdefs.h를 포함하는 다수의 애플리케이션이 컴파일러 제약 조건 없이 특정 속성을 사용하여 빌드 오류를 유발하는 구조적 한계가 존재함.

Technical Solution

  • __glibc_has_attribute 매크로를 통한 컴파일러별 속성 지원 여부 검증 및 조건부 컴파일 적용
  • __has_attribute 및 __has_builtin 기반의 기능 감지를 통한 런타임/컴파일타임 정적 분석 체계 구축
  • asm 라벨 등 표준 감지 불가 기능에 대해 무조건적 #error 처리 대신 시도 후 실패를 허용하는 유연한 폴백 전략 채택
  • __builtin_va_list의 중복 정의 및 충돌 해결을 위한 컴파일러 내장 함수 검증 로직 강화
  • GCC 의존적인 SIZE_TYPE 등의 매크로를 X_TYPE 형태의 추상화된 미리 정의 매크로로 대체하여 컴파일러 독립성 확보

1. 라이브러리 설계 시 컴파일러 전용 확장 기능 사용 전 __has_attribute 등 표준 감지 매크로 적용 여부 확인

2. 타사 컴파일러 호환성이 필요한 헤더 파일 내에 보호되지 않은 __attribute__ 사용 사례 전수 조사

3. 하드웨어/컴파일러 의존적인 심볼 정의 시 추상화된 매크로 레이어를 도입하여 직접 참조 최소화

원문 읽기