Какое значение файла .h в статической библиотеке? - PullRequest
1 голос
/ 17 января 2012

Я новый разработчик iOS. У меня есть очень основные сомнения. Я читал во многих местах, что нам нужно отправить наш файл .h вместе с файлом .a для статической библиотеки.

И .a файлы - это скомпилированные библиотеки, имеющие полную реализацию, которую разработчики не могут прочитать сами, только для защиты кода разработчика.

И нам нужен файл .h, чтобы знать, какие публичные функции доступны. но тогда почему Xcode не может просто декодировать файл .a и использовать его напрямую вместо отправки другого файла .h. Xcode не должен показывать реализацию .a разработчикам, но вместо этого может предложить разработчикам общедоступные методы.

Я не вижу логической причины, по которой Apple так не поступила. Я уверен, что есть веская причина для доставки .h файлов. Я хочу знать, в чем может быть причина?

Ответы [ 2 ]

5 голосов
/ 17 января 2012

Файл .a - это просто архив одного или нескольких .o (объектных) файлов.Объектные файлы содержат скомпилированный машинный код (для одной конкретной операционной системы с определенной архитектурой процессора).Исходный исходный код «утерян».

Факт, о котором вы, вероятно, не знали: объектные файлы могут содержать двоичные файлы, скомпилированные из произвольного языка программирования.Файл .h является специфичным для C / C ++ / Objective C.Он содержит типы данных и прототипы функций, которые вам необходимы, чтобы иметь возможность использовать функции / типы данных / ..., содержащиеся в двоичной форме в объектном файле на C / C ++ / Objective C. Например, вы можете написать библиотеку Pascal, скомпилировать ее.в файл .a и используйте этот код в программе Objective C, используя соответствующий файл заголовка (.h).

Вы также можете иметь только один файл заголовка (файл .h), но, например, 6 разных.a файлы: один скомпилирован для Mac OS X 64bit, один для Mac OS X 32bit, один для Linux 2.6 64bit, один для Linux 2.6 32bit, один для FreeBSD и последний для OpenBSD.

ИИ последнее, но не менее важное: Apple решила пойти по этому пути, файлы .a и .o можно найти (по крайней мере) в любой Unix-подобной операционной системе, а заголовочные файлы являются стандартом в C, так какпервые дни.

Обычно, если вы портируете библиотеку с Mac на Linux, вы можете использовать (большую часть) код и файл заголовка, но нужно скомпилировать отдельный файл .a, содержащий объектные файлы, скомпилированные для Linux.

0 голосов
/ 17 января 2012

файлы .a представляют собой набор скомпилированных файлов .c, .c++, .m и т. Д. Декомпиляция этих файлов только для того, чтобы получить имена / подписи функций, а) будет хитрой по соображениям морали / конфиденциальности и б) будет большой работой. Файлы .a не являются байт-кодом или чем-то таким же простым для обратного проектирования - они являются машинным кодом.

Даже если вы произвели обратный инжиниринг «источника» из этих скомпилированных файлов, они не будут содержать реальных имен методов, подписей или чего-либо узнаваемого.

...