본문 바로가기

Programming/iOS

정적 라이브러리 파일에서 특정 symbol 제거

반응형

빌드 오류 시 라이브러리 충돌로 인해 duplicate symbol 오류가 발생 할 수 있다.


원인은 Other Linker Flags-all_load 속성으로 인해 양쪽의 라이브러리에서 동시에 로드 했기 때문이다.





많은 내용이 -all_load -> _force_load로 바꾸면 된다고 하지만 만약 그럴 수 없는 경우 아래의 방법을 사용하자.


ex)

libTest.a와 libTest_1.a 라이브러리에 같은 헤더를 참조 하고 있어서 오류가 발생.

libTest.a에 있는 심볼 중 xml관련 심볼을 제거


// 라이브러리 폴더로 이동


lipo -info libTest.a


lipo -thin armv7 libTest.a -output libTest-armv7.a

ar -t libTest-armv7.a

mkdir libTest-armv7

cd libTest-armv7

ar -x ../libTest-armv7.a

rm xml*.o

libtool -static -o ../libTest-armv7-edit.a *.o


cd ..


lipo -thin i386 libTest.a -output libTest-i386.a

ar -t libTest-i386.a

mkdir libTest-i386

cd libTest-i386

ar -x ../libTest-i386.a

rm xml*.o

libtool -static -o ../libTest-i386-edit.a *.o


cd ..


lipo -create libTest-armv7-edit.a libTest-i386-edit.a -output libTest-edit.a



참고사이트)

http://atnan.com/blog/2012/01/12/avoiding-duplicate-symbol-errors-during-linking-by-removing-classes-from-static-libraries

http://stackoverflow.com/questions/2910205/how-to-handle-duplicate-symbol-error-from-3rd-party-libraries

반응형

'Programming > iOS' 카테고리의 다른 글

How To Use NSOperations and NSOperationQueues  (0) 2014.11.17
Jenkins 설명 자료  (0) 2014.11.13
phoneGap 설치 방법  (0) 2014.07.11
Push 기능 테스트 앱  (0) 2014.05.31
NSString 인코딩 / 디코딩 처리  (0) 2014.04.30