Размер приложения Cocoa на основе Boost

Что мне нужно:

  • обернуть библиотеку C++ на основе boost в Objective-C++;
  • создайте приложение Cocoa, используя эту библиотеку Objective-C++.

Что я имею:

  • встроенный boost 1.46.1 (динамический .dylib и статический варианты .a);
  • Проект Xcode библиотеки C++ (на основе boost, завернутый в Objective-C);
  • Проект Xcode конечного приложения с библиотекой, связанной как подпроект (цель приложения зависит от библиотеки).

Мои вопросы:

  1. Когда я создаю приложение, двоичный файл результата составляет 15–20 МБ, а промежуточная библиотека - 100 МБ. Как это можно объяснить?
  2. Окончательное приложение (в любом варианте) при запуске использует библиотеки boost из системной папки (я вижу это в мониторе активности, в разделе «Информация о процессе»> «Открыть файлы и порты»). Как этого избежать? Или как создать полностью автономное, независимое от библиотек и фреймворков приложение?

Еще немного деталей:

  • Я пытался связать с библиотекой варианты .dylib и .a — промежуточная библиотека — 100 МБ, приложение — 15 МБ;
  • Пробовал использовать .framework вместо статической библиотеки .a — фреймворк 15 МБ, приложение с фреймворком 30 МБ;
  • Я пытался создать чистое приложение командной строки на C++ (функционально эквивалентное приложению + библиотека Objective-C) — размер бинарного файла составляет 15 МБ;
  • библиотека использует только часть boost (filesytem, ​​iostream, program_options, system, threads) + несколько системных dylib;
  • Я использую Xcode 4.2, Mac OS X 10.6 SDK, вариант x86_64;
  • протестировано с компиляторами LLVM GCC 4.2, Apple LLVM 3.0, GCC 4.2;
  • проверено с помощью Strip Debug Symbols YES и NO, Удаление мертвого кода YES и NO, Генерация символов отладки YES и NO, Уровень оптимизации -O0 и -Os, Скрытые встроенные методы YES и NO, Символы, скрытые по умолчанию YES и NO.

person Andrew Bridge    schedule 04.08.2011    source источник


Ответы (1)


чтобы узнать, от каких библиотек зависит ваше приложение, вы можете использовать otool -L yourCocoaApp. В нем будут перечислены зависимости вашего приложения и их полные пути. Вы также можете установить приложение captainmaclib.

Чтобы ваше приложение использовало определенную версию библиотеки, вы должны настроить пути ее зависимостей. Вы можете сделать это с помощью инструмента командной строки install_name_tool или с помощью приложения dylibbundler с сайта выше. Также есть инструменты, включенные в CMake. сделать это. Возможно, внутри XCode существуют инструменты, но я их не использую, поэтому не знаю.

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

person Clément    schedule 10.10.2011