Programming/iOS

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

알레아 2014. 10. 16. 18:34
반응형

빌드 오류 시 라이브러리 충돌로 인해 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

반응형