2016-07-15 4 views
1

Мы переносим нашу разработку Linux в окна.Как файл .lib отличается от простого файла .a, созданного с помощью ar?

Чтобы создать статическую библиотеку, мы по-прежнему используем ar под окнами (Msys2) для создания файла libXXX.a. Путь к окнам - это фактически создать файл .lib с помощью некоторого инструмента Windows. Но файл libXXX.a, похоже, отлично работает в нашей цепочке инструментов msys2. Но ссылка на этот файл ОЧЕНЬ slow. Итак, в чем разница между .a и файлом .lib? Будет ли создание файла .lib ускорить соединение?

+0

'a' в' libxxx.a' означает * Архив *. Это просто несжатый архив объектных файлов. Хотя я ничего не знаю о файлах '.lib', используемых Visual Studio, я бы предположил, что в качестве базы они также являются просто архивом объектных файлов. Зная Windows и Visual Studio, возможно, это больше, чем это, но в основе его все равно может быть архив объектных файлов. –

+0

@JoachimPileborg: Я знаю, что 'ar' создает архив. Вопрос в том, что такое '.lib' -файл и как он относится к архиву. – gexicide

+0

[Связанный (если не дублируемый) вопрос] (http://stackoverflow.com/questions/2371531/which-format-does-static-library-lib-files-use-where-can-i-find-official). –

ответ

0

Оба .a и .lib являются архивами, которые содержат кучу объектных файлов. Разница в том, что в первом случае они являются двоичными файлами ELF, а во втором они являются файлами COFF (MS COFF). И, вероятно, ваша инструментальная цепочка нуждается в дополнительных усилиях по связыванию с неродным форматом объекта.

P.S. .lib файлы также часто могут содержать заглушки для создания динамических импорта вместо объектов COFF. И это также может повлиять на время сборки по той же причине (не-родной формат данных).

P.P.S Очевидно, что для ускорения процесса связывания все входы должны иметь тот же формат, который является родным для компоновщика.

+0

Объектные файлы в моем '.a' являются файлами COFF. Я нахожусь в окнах и использую toolchain, который создает COFF. 'ar' не заботится о том, что вы хотите архивировать. Он будет с радостью архивировать файлы COFF. – gexicide