eabi버전이 달라서 컴파일이 안되는것 같습니다
먼저 주변 시스템 환경입니다.
타겟 보드 : TI사의 Cortex A8기반 AM3359보드입니다.
사용한 컴파일러 : TI사의 arm-linux-gnueabihf-g++ 4.7.3
크로스 컴파일 호스트 : ubuntu 12.04.3 32bit
에러내용 : Object파일로 전부 컴파일이 된것같은데, 이것을 어플리케이션 응용프로그램으로 만들때 에러가 뜨는것같습니다.
컴파일러 플래그 : -D_REENTRANT -lpthread -lm -o
에러로그 :
/ti/ti-sdk-am335x-evm/linux-devkit/sysroots/i686-arago-linux/usr/bin/../lib/gcc/arm-linux-gnueabihf/4.7.3/../../../../arm-linux-gnueabihf/bin/ld: error: Source object t5csser.o has EABI version 0, but target /destin/mms/Target/bin/t5 has EABI version 5
/ti/ti-sdk-am335x-evm/linux-devkit/sysroots/i686-arago-linux/usr/bin/../lib/gcc/arm-linux-gnueabihf/4.7.3/../../../../arm-linux-gnueabihf/bin/ld: failed to merge target specific data of file t5csser.o
/ti/ti-sdk-am335x-evm/linux-devkit/sysroots/i686-arago-linux/usr/bin/../lib/gcc/arm-linux-gnueabihf/4.7.3/../../../../arm-linux-gnueabihf/bin/ld: error: Source object t5def.o has EABI version 0, but target /destin/mms/Target/bin/t5 has EABI version 5
/ti/ti-sdk-am335x-evm/linux-devkit/sysroots/i686-arago-linux/usr/bin/../lib/gcc/arm-linux-gnueabihf/4.7.3/../../../../arm-linux-gnueabihf/bin/ld: failed to merge target specific data of file t5def.o
collect2: error: ld returned 1 exit status
컴파일러는 저 4.7.3버전으로 써야하는데, 방법이 있는지 문의드립니다.
SDK 컴파일 흔히 발생하는 일
다른 App의 SDK 컴파일 시에, toolchain (컴파일러 셋) 달라서 일어날 수 있는 흔한 일입니다.
특히 임베디드 환경에서는 컴파일러를 동일하게 써야합니다.
예를 들어서, linux 2.4 커널 초반까지 커널 모듈과 커널 자체가 서로 다른 Toolchain을 써서 만들어져도 동작하게 되어있는데, 종종 아주 예상치 못한 버그를 발생시켰습니다.
그 후에 linux 커널에서는 빌드된 toolchain(컴파일러) 버전을 체크하도록 강제했습니다.
원소스를 SDK로 컴파일했는데
답변 감사드립니다.
원래저희가 가지고 있는 소스파일을 TI사의 AM3359보드에 적용시키려고
TI사에서 제공하는 SDK에 들어있는 툴체인으로 컴파일 한 결과입니다.
현재 호스트 우분투 리눅스는 3.8.0 커널버전이고 보드는 3.2.0버전입니다.
TI SDK에서 보드에 맞게 셋팅된 SDK가 제 우분투 커널버전에 영향을 미치는지요?
질문에 적었듯이 원 소스를 컴파일하여 오브젝트파일(.o)을 만드는데까지는 성공하였지만 이 오브젝트파일로 어플리케이션을 만드는 과정에서 나오는 오류같습니다.
이 어플리케이션을 보드에 올려야 하기 때문에 TI-SDK에서 제공한 셋팅으로 적용하고 있는것이구요
원소스의 make파일의 오브젝트파일이 꼬이지 않기위해 컴파일전에 make clean으로 초기화시키고 시작해서 다시 컴파일도 해보았습니다.
-meabi 옵션을 이용해 보시는건 어떨까요?
-meabi 옵션을 이용해 보시는건 어떨까요?
사용할수 없다고 하네요
arm-linux-gnueabihf-gcc: error: unrecognized argument in option ‘-mabi=eabi’
arm-linux-gnueabihf-gcc: note: valid arguments to ‘-mabi=’ are: aapcs aapcs-linux apcs-gnu atpcs iwmmxt
-meabi라는 플래그가 안되서 자료를 찾아보니 -mabi=eabi 식으로 하는데 제 컴파일러에선 먹질 않네요...
-meabi는 어셈블러 옵션이라 -Wa와 함께
-meabi는 어셈블러 옵션이라 -Wa와 함께 넣어주셔야 합니다.
arm-none-linux-gnueabi-gcc -Wa,-meabi=5 ...
댓글 달기