seukseok의 개인 블로그

GCC LTO 켰다가 링크가 깨졌을 때 복구한 방법

· tech

임베디드 펌웨어에서 -flto 도입 후 발생한 linker plugin 에러를 툴체인 정합으로 해결한 사례.

코드 크기를 줄이려고 -flto를 켰다가 링크가 바로 깨졌다.

lto1: fatal error: bytecode stream generated with LTO version ...
collect2: error: ld returned 1 exit status

원인은 단순했다. 오브젝트 일부가 다른 GCC 버전으로 빌드되어 LTO bytecode 버전이 섞였다.

해결 순서:

AR = arm-none-eabi-gcc-ar
RANLIB = arm-none-eabi-gcc-ranlib

LTO는 이득이 크지만 툴체인 버전 정합을 못 지키면 바로 발목 잡는다.

주간 이슈 메모 (짧은 노트형)

Linux kernel 안정화 릴리즈와 드라이버 수정이 연속 반영된 기간

커널/드라이버 계층 이슈는 애플리케이션 로그에서 직접 드러나지 않아 원인 추적이 늦어진다. 그래서 런타임 문제를 볼 때도 dmesg, irq 통계, DMA 에러 카운터를 함께 보아야 한다. 특히 시리얼·네트워크·스토리지처럼 I/O 경계에서 발생하는 지연은 상위 스택 튜닝만으로 해결되지 않는 경우가 많다.

참고