xcode project- / target-settings-syntax для флага компоновщика force_load на iPhone - PullRequest
25 голосов
/ 28 июля 2010

Я сталкиваюсь с двойной связью, что, с одной стороны, для одной из сторонних статических библиотек мое приложение iPhone использует флаг компоновщика -all_load в настройках проекта приложения или цели, в противном случаеприложение аварийно завершает работу во время выполнения, не находя некоторые символы, вызываемые внутренне из lib, с другой стороны, для другой сторонней статической библиотеки -all_load нельзя устанавливать на уровне приложения, иначе приложение не будет собираться благодаря «дублированным символам» -ошибка компоновщика.Чтобы решить эту проблему, я теперь хочу использовать force_load instant of load_all, поскольку из-за документации он делает то же самое, что all_load, но только для пройденного пути или lib-файла, вместо всех библиотек.Проблема с force_load заключается в том, что я понятия не имею, как передать путь или файл в качестве параметра вместе с ним при передаче через xcode project- или target-settings.Все возможности синтаксиса, которые приходят мне в голову, либо приводят к тому, что xcode думает, что это другой флаг компоновщика, чем параметр к предыдущему, либо компоновщик выдает ошибки, связанные с синтаксисом, или этот флаг просто ничего не делает по сравнению с тем, что он не установлен.Я также открыл .pbxproj-файл в текстовом редакторе, чтобы вручную изменить его на правильный синтаксис командной строки, но при перезагрузке проекта с помощью xcode он автоматически изменяет синтаксис на интерпретацию параметра force_load как отдельного флага.

У кого-нибудь есть идеи по этому вопросу?

Спасибо, Кайзерлуди.

Ответы [ 2 ]

18 голосов
/ 29 октября 2010

Я только что попробовал это.Я собрал статический двоичный файл PCRE для armv6, armv7 и i386 для использования в моем проекте iPhone.Мой проект обычно просто добавляет мою библиотеку в проект, и это прекрасно связывает.Поэтому я снял флажок целевого членства для libpcre.a и перестроил.Как и ожидалось, я получил кучу пропущенных ошибок компоновщика символов для символов pcre.Затем я открыл окно настроек цели и отредактировал раздел «Другие флаги компоновщика».Я добавил:

-force_load lib/pcre/libpcre.a

Каталог lib находится в том же каталоге, что и мой файл project.xcodeproj.

Он отлично связан, поэтому я знаю, что команда force_load сработала (и я вижу,это добавлено к флагам сборки, когда xcode создает файл).

Надеюсь, это поможет.

Обновление:

Я также попытался добавить системную библиотеку в «Другие флаги компоновщика"строка так:

-force_load src/pcre/libpcre.a -force_load ${SDKROOT}/usr/lib/libz.dylib

Это тоже сработало.

1 голос
/ 09 января 2011

Я только что добавил force_load в наш проект, и все в порядке, используя самый простой синтаксис.Библиотека является зависимостью, встроенной в тот же проект.Поэтому библиотека включается в командную строку ссылки дважды: один раз как обычный входной файл и один раз как аргумент -force_load.Возможно, вы захотите поместить символы кавычки вокруг аргумента.

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

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...