본문 바로가기

System/Linux

남의 라이브러리 컴파일시 막힐 경우

남의 라이브러리를 이용하여 컴파일을 할 경우, 막힐때가 있다.

이번에 막힌건 남의 라이브러리를 사용하여 개발을 할때에

/라이브러리경로/라이브러리이름.a: could not read symbols: File format not recognized

라는 에러가 나온 경우이다.

에러의 원인을 몰라서 검색을 계속 하던중, 64비트로 컴파일 된것이 아닌가 라는 생각이

들었고, 아는분에게 물어봤는데

 

    >file 아카이브.a

    >objdump -a 아카이브.a

 

를 해보라는 것이었다.

file이라는 명령어는 Determine file type of FILEs 이라하고

objdump라는 명령어는 Display information from object <file(s)>라고한다.

정확히는 모르겠고, 화일의 정보를 보여주는 명령어들로 이해했는데 ㅎ

 

여기서 이런 명령들을 실행한 결과

File format not recognized

라는 에러가 계속 나왔고,

    >ar -x 아카이브.a

라는 명령어를 실행하여 아카이브 파일을 벗긴후, file, objdump를 실행한 결과

file 명령을 실행했을 때에

ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped

라는 메세지가 출력되었다.

     >file 파일이름.o

 

문제점이 발견된것이다.

발생한 문제점은 해당 라이브러리가 64비트로 컴파일이 되었다는것이었고,

32비트로 개발중이었던 나는 당연히 에러를 볼수 밖에없던것이었다.

 

다음에 이런일이 생겨도 멋지게 해결했으면...

 

 

ps. 아카이브 파일 벗기기

              >ar -x 아카이브.a 

      아카이브 파일 만들기

              >ld -G -o 아카이브.so *.o


출처 : http://blog.naver.com/jchaney/40039471216