Вопрос:

Связывание статических библиотек, которые совместно используют другую статическую библиотеку

xcode linker static-libraries

9978 просмотра

2 ответа

506 Репутация автора

В настоящее время у меня есть один проект Xcode для очень большой базы кода, я назову его Project X , который я делю на несколько подпроектов ( проекты A, B, C ).

Пока что каждый из этих проектов компилируется сам по себе, просто отлично. Все они создают статические библиотеки. Проект B и Проект C зависят от статической библиотеки, созданной Проектом A для сборки.

У меня есть еще один проект Xcode, Project Z , который требует библиотек статических производимых проектов В и С . В этом и заключается проблема. Когда Project Z вступает в фазу компоновщика, вещи взрываются - в библиотеках проектов B и C обнаружены повторяющиеся символы для кода, с которым они изначально ссылались в Project A !

Я очень новичок в мире статических библиотек, и я уверен в том , как двигаться вперед с проектом Z , или как изменить другие проекты так , чтобы они увязывают против того же проекта A Lib. У меня такое ощущение, что это невозможно. Какие у меня есть варианты?

Редактировать:

Я должен уточнить, что Проект B и Проект C должны быть встроены в отдельные статические библиотеки, потому что некоторым клиентам потребуется только один или другой.

Кроме того, у меня возникла эта дилемма на платформах OSX и iOS.

Я понимаю, что могу решить эту проблему в OSX, создав проекты в виде динамических библиотек. Тем не менее, я бы предпочел не делать этого, и это все еще оставляет меня с той же проблемой на iOS.

Автор: Jeff Источник Размещён: 31.07.2012 11:14

Ответы (2)


2 плюса

17206 Репутация автора

Это похоже на проблему, которую CoacoaPods создал для решения. Если вы определите pod для каждого из этих проектов, то Z сможет определить и связать все свои зависимости по всей цепочке, не вводя повторяющиеся символы.

Автор: Jonah Размещён: 01.08.2012 05:22

17 плюса

217202 Репутация автора

Решение

Статические библиотеки никогда не должны включать другие статические библиотеки (или вообще сторонний код). Статическая библиотека - это просто набор .o файлов, склеенных вместе. Так что, если у вас есть несколько копий одной и той же информации, она взорвется.

Каждая статическая библиотека должна иметь свой собственный код. Конечное приложение отвечает за связывание всех необходимых библиотек (включая библиотеки, требуемые библиотеками). Таким образом, существует ровно одна копия каждой связанной вещи.

Автор: Rob Napier Размещён: 01.08.2012 07:08
Вопросы из категории :
32x32