2013-03-27 1 views
1

Мы знаем, что мы можем заставить статические библиотеки загружать все объектные файлы во время связывания. Это используется для различных целей, таких как включение объективных категорий c в статические библиотеки и т. Д.Использовать статический lib для НЕ использовать -ObjC -all_load флаг?

Вопрос в том, можно ли заставить библиотеку НЕ загружать все объектные файлы, когда в проекте используются флаги -ObjC или -all_load?

Я использую некоторые функции clang (в частности, директив __has_include) для управления импортом некоторых заголовков, но когда используется флаг -ObjC, эта директива не действует, все объектные файлы загружаются, поэтому моя библиотека не работает должным образом.

Есть ли способ решить или обход проблемы?

С уважением,

ответ

2
Is there any way to solve or workaround this problem? 

Да, но это хрупкое и подвержено ошибкам до точки, вероятно, не стоит на некоторое время. Вероятно, будет проще реорганизовать ваш код, чтобы не требовать частичной привязки вашего статического librar {y, ies}.

У вас есть твердая ссылка на каждый символ, который вам нужно загрузить, тогда компоновщик разрешит символ и заставит его подключиться к окончательному исполняемому файлу.

Однако, поскольку это вовсе не поддерживаемый или рекомендуемый шаблон, возможно, не существует способа напрямую ссылаться на некоторые символы внутри кода. Кроме того, не представляется символом, представляющим целую категорию. Возможно, вам придется ссылаться на любой метод, содержащийся в отдельной категории.

См. Инструмент командной строки nm; nm -m library сбрасывает всю информацию о символах, содержащуюся в библиотеке.