Как конвертировать несколько исходных файлов в один .a файл - PullRequest
1 голос
/ 29 мая 2011

Я только что узнал, что Code Blocks (и компилятор MingW) принимает только файлы библиотеки .a, а не .lib, что является самым простым способом преобразования .lib в файлы .a ... любые учебные пособия и т. Д. Приветствуются. Изменить Позвольте мне немного изменить мой вопрос, как вы можете конвертировать множество исходных файлов в один архивный файл .a *

Ответы [ 3 ]

3 голосов
/ 31 мая 2011

Чтобы ответить на конкретный вопрос, как конвертировать несколько исходных файлов в один архивный файл для статической компоновки; это двухэтапная операция. Сначала вы должны скомпилировать исходные файлы в объектные файлы, а затем превратить объектные файлы в архив.

Если у вас есть MSYS с вашей установкой MinGW, я рекомендую использовать это. Если нет, вы все равно можете использовать командную строку Windows cmd.exe.

Убедитесь, что каталог MinGW / bin является частью переменной среды PATH, чтобы вы могли вызывать компилятор из любого места.

Из командной строки перейдите в каталог, содержащий исходный код. Оттуда введите команду

mingw32-gcc -O2 -c [files] -I[header directory]

Вы должны либо назвать [files] конкретно, -c a.cpp b.cpp c.cpp, либо вы можете отождествить их всех с *.cpp. [header directory] - это место, где находятся файлы .h источника относительно вас. Как правило, исходные файлы находятся в каталоге, который называется / src, а файлы заголовков - в дочернем каталоге, который называется / include. Вы бы назвали этот каталог -I../include. Если заголовочные файлы находятся в каталоге / include в каталоге / src, это будет -Iinclude.

После того как вы сгенерировали файлы .o, вы набираете команду

ar rcs lib[something].a [files]

Заменить [something] на имя библиотеки. Это имя, которое будет отображаться в диалоге Link Libraries в Code :: Blocks. Файлы - это либо имя объектных файлов, которые вы создали ранее (a.o, b.o, c.o), либо, если в каталоге нет несвязанных объектных файлов, вы можете поместить в *.o.

Это должно привести к созданию архивного файла в каталоге. Теперь вы можете поместить его в соответствующий каталог (возможно, в дочерний каталог / include с именем / lib) и добавить этот каталог в конфигурацию Code :: Blocks в разделе Каталоги поиска компоновщика. Затем вы должны не забыть фактически добавить библиотеку для вашего проекта.

2 голосов
/ 29 мая 2011

MinGW может использовать файлы .LIB. Следующие ссылки на .LIB, созданные с помощью компилятора MS:

gcc b.c a.lib

В кодовых блоках вы добавляете библиотеку в диалоговом окне Project|Build Options..., затем переходите на вкладку Linker Setting s и добавляете в поле Link Libraries.

1 голос
/ 30 мая 2011

.lib (и .a также) работает в двух разных мощностях:

  • В качестве библиотеки импорта для общего Dll, от которого зависит ваша программа.
  • В качестве архивной библиотеки, созданной из одного или нескольких объектных файлов, скомпилированных из исходного кода.

Вы действительно не указали в своем вопросе, с какой формой вы работаете. Если вы хотите выполнить вторую форму, вам нужно будет создать исходный код в gcc как статическую библиотеку, как это предложил Перссон, поскольку формат библиотеки, используемый инструментами msvc, несовместим.

Однако есть и хорошие новости, если вы работаете с первой формой. MinGW-порт gcc должен иметь возможность прозрачной работы с библиотекой импорта в формате coff, созданной с помощью средств разработки msvc. Что вы можете сделать, это просто переименовать импорт *.lib в lib*.a и просто передать его компоновщику, как в любом другом файле *.a. Компоновщик должен иметь возможность разобраться в его реальном формате.

Я протестировал это в tdm-gcc-4.5.2 с последней ночной сборкой кодовых блоков, и похоже, что она работает нормально.

Редактировать: Слил мой комментарий как часть ответа. Если вы работаете со второй формой и вам нужно создать статическую библиотеку из исходного кода, шаги примерно такие:

Если существует существующий проект msvc, вы можете использовать его в качестве отправной точки, импортировав его в кодовые блоки. Это будет в Файл-> Импортировать проект-> Visual Studio и т. Д.

Если ничего не доступно, создание нового проекта C :: B с нуля не так уж сложно. Просто перейдите Файл-> Новый-> Проект , выберите « Статическая библиотека » в качестве типа проекта и добавьте любой исходный файл. Если библиотека написана в полупортативном виде, она должна без проблем скомпилироваться.

...