Размер приложения Какао на основе Boost - PullRequest
0 голосов
/ 04 августа 2011

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

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

Что у меня есть:

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

Мои вопросы:

  1. Когда я создаю приложение, бинарный файл имеет размер 15-20 МБ, а промежуточная библиотека - 100 МБ.Как это можно объяснить?
  2. Конечное приложение (в любом варианте) при запуске использует библиотеку boost из системной папки (я вижу это в мониторе активности, в Process Info> Open Files and Ports).Как этого можно избежать?Или как создать полностью автономное, независимое от libs-and-frameworks приложение?

Еще несколько деталей:

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

1 Ответ

0 голосов
/ 10 октября 2011

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

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

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

...