컴파일시 아래와 같은 오류가 발생하는 경우가 있다.
/usr/bin/ld: skipping incompatible (...) when searching for -l(...) /usr/bin/ld: cannot find -(...) collect2: ld returned 1 exit status |
(...) 은 임의의 라이브러리 명이다.
해당 오류가 발생하는 원인은 크게 두가지가 있다.
첫번째로 해당 라이브러리가 존재하지 않거나 잘못된 위치를 참조하고 있을 수 있다.
-l 이 아니라 -L 인 경우를 포함해서 사소하고 다양한 이유로 ld 가 터지는 경우이다.
이 경우 locate 명령어 등을 통해 정확한 확인하고 없을 경우 설치한 후 다시 빌드한다.
두번째 경우는 조금 아차 싶은 문제이다.
Cross Compile 작업 시 해당 오류가 발생할 수 있다. 1
라이브러리 자체가 .so 또는 .o 같은 binary file 이기 때문에 ld 가 호환성 문제를 일으키는 것이다.
간단한 해결 방법은 gcc 실행시 -m32 옵션을 추가해주는 것이다.
만약 Makefile 을 이용하고 있다면 CFLAGS 2(C++ 는 CXXFLAGS) 옵션에 -m32 를 추가하면 된다. 3
또는 ./configure CFLAGS="-m32" 등을 이용해서 Makefile 을 생성하면 될 것이다.
아키텍쳐 관련 옵션에 대해서는 최신 GCC 문서를 참고하는 것을 추천한다.
https://gcc.gnu.org/onlinedocs/gcc-4.9.1/gcc/i386-and-x86-64-Options.html#i386-and-x86-64-Options