Связывание статических библиотек, которые совместно используют другую статическую библиотеку
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:082 плюса
Это похоже на проблему, которую CoacoaPods создал для решения. Если вы определите pod для каждого из этих проектов, то Z сможет определить и связать все свои зависимости по всей цепочке, не вводя повторяющиеся символы.
Автор: Jonah Размещён: 01.08.2012 05:22Вопросы из категории :
- xcode Изменить шаблоны в Xcode
- xcode Как вы можете создать Makefile из проекта Xcode?
- xcode Инструменты обнаружения утечки памяти
- xcode Проверка контейнеров STL в Xcode
- xcode Xcode: ошибка кода приложения iPhone
- xcode Как изменить шаблон авторских прав по умолчанию
- linker Почему порядок, в котором связаны библиотеки, иногда вызывает ошибки в GCC?
- linker Почему фатальная ошибка «LNK1104: невозможно открыть файл« C: \ Program.obj »возникает при компиляции проекта C ++ в Visual Studio?
- linker Линкер не хватает памяти LNK1102
- linker Встраивание DLL в скомпилированный исполняемый файл
- linker Как заставить слабую связь работать с GCC?
- linker g ++ неопределенная ссылка на typeinfo
- static-libraries Как просмотреть содержимое библиотеки Windows (* .lib)
- static-libraries Преобразовать статическую библиотеку в общую библиотеку?
- static-libraries Сколько дискового пространства реально экономят разделяемые библиотеки в современных дистрибутивах Linux?
- static-libraries Как преобразовать динамическую DLL в статическую библиотеку?
- static-libraries Разница между статическими и общими библиотеками?
- static-libraries Извлечение имен функций из статической библиотеки