Ответ 1
Это потому, что ваш CustomiPhoneLib.a - это толстая библиотека, то есть библиотека, которая содержит более одной целевой архитектуры, а именно armv6 и armv7 на iOS. Вы можете использовать lipo
для извлечения определенной архитектуры в другой .a файл, используя ar
и ranlib
для управления им по своему усмотрению, а затем снова использовать lipo
, чтобы перекомпилировать управляемые файлы .a в один .a жирный файл. Например,
lipo CustomiPhoneLib.a -thin armv6 -output CustomiPhoneLibarmv6.a
lipo CustomiPhoneLib.a -thin armv7 -output CustomiPhoneLibarmv7.a
### use ar and ranlib at will on both files
mv CustomiPhoneLib.a CustomiPhoneLib.a.original
lipo CustomiPhoneLibarmv6.a CustomiPhoneLibarmv7.a -create -output CustomiPhoneLib.a
Однако вам не нужно делать это по той причине, о которой вы говорили. Компилятор будет вытаскивать только объекты (.o) из библиотеки (.a), если ему нужно разрешить некоторую ссылку на символ. Поэтому, если библиотека содержит объектный файл, символы которого никогда не ссылаются во время процесса связывания (т.е. Символы, которые не используются эффективно), этот объектный файл не превратит его в исполняемый файл.