2011-01-19 2 views
0

Я создал статическую библиотеку, использующую xcode для IOS. В C++, если класс необходимо вызывать из других программ, ему нужно будет добавить «__declspec (dllexport)» для экспорта класса. В xcode экспорт не требуется. Есть ли способ предотвратить вызов функций в библиотеке, которые я хочу, чтобы показывать другим программам?Предотвращение вызова функций в статической библиотеке

Спасибо.

ответ

2

http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Tasks/ExportingInterfaces.html

Экспортирование Framework Интерфейс

При создании базы или приложения с помощью Xcode, компоновщик экспортирует все из символов, определенных в коде по умолчанию. Для рамки доставки со многими символами это может привести к проблемам с производительностью во время выполнения. Когда среда загружается, динамический редактор ссылок загружает символы, связанные с каркасом. Если структура содержит ряд частных функций, символы для этих частных функций не будут использоваться, но все еще загружаются вместе с символами для публичных функций. Загрузка этих дополнительных символов не только уничтожает память, но и требует больше работы, чтобы ходить по списку во время поиска символа.

В Xcode вы можете ограничить символы, экспортируемые вашим исполняемым файлом, указав файл экспорта в параметрах компоновщика.

Создание Вашего Экспорта файла

An экспорт файл представляет собой простой текстовый файл (.txt или другое расширение текстового файла), который содержит список символов, которые вы хотите экспортировать. Чтобы создать файл, добавьте новый пустой файл в проект Xcode. В этот файл добавьте список символов, которые вы хотите экспортировать, по одному символу на строку.

Для кода на основе ANSI C вы обычно можете просто префикс символа подчеркивания имени функции или переменной, чтобы получить имя символа. Для языков, таких как C++, которые используют искаженные имена символов, вам может понадобиться запустить инструмент nm, чтобы получить список существующих имен символов. Запустите nm с параметром -g, чтобы увидеть экспортированные в данный момент символы. Затем вы можете скопировать выходные данные из инструмента и вставить его в файл экспорта, удалив любую постороннюю информацию. Следующий текст показывает некоторые результаты выборки для структуры Cocoa, порожденного нм:

U .objc_class_name_NSDate 
b000ad54 T _InitCocoaFW 
b000aea8 T _addNumbers 
b000ade8 T _getInitDate 
U _objc_msgSend 

Для экспорта рамочных функций, указанных в этом выводе, вы бы создать текстовый файл с этим текстом:

_InitCocoaFW 
_addNumbers 
_getInitDate 
Смежные вопросы