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

xcode linker static-libraries

9978 просмотра

2 ответа

В настоящее время у меня есть один проект 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 Источник Размещён: 13.11.2019 11:38

Ответы (2)


17 плюса

Решение

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

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

Автор: Rob Napier Размещён: 01.08.2012 07:08

2 плюса

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

Автор: Jonah Размещён: 01.08.2012 05:22
Вопросы из категории :
32x32