Статическое связывание с libarchive в Windows с помощью MinGW

Я уже некоторое время использую libarchive в своем проекте, и он отлично работает, на данный момент я динамически подключаюсь к нему, поэтому в Windows файл libarchive.dll должен присутствовать в системе. Теперь я хотел бы статически связать библиотеку, чтобы мне не приходилось распространять DLL, но у меня возникли серьезные проблемы с попыткой добиться этого!

В настоящее время в моем make-файле есть что-то вроде этого: -Lpath/to//libarchive/ -larchive

И это работает, но это динамическая ссылка. Я не знаю, как применить статическую ссылку.

Я вижу в каталоге libarchive два файла a , libarchive.dll.a и libarchive _static.a. Я полагаю, что хочу связать с libarchive _static.a, но я не могу указать это, выполнение -larchive _static в файле make приводит к ошибкам компоновщика.

У меня сложилось впечатление, что статические библиотеки под Windows являются файлами lib, но я не получаю такой тип файла, когда собираю libarchive.

Как я могу сделать файл.lib из libarchive. Кроме того, в качестве дополнительного вопроса, в чем разница между файлом a и файлом lib ?

Обновление

Для статической ссылки на libarchive команда вашей библиотеки для make должна содержать:

-Lpath/to//libarchive/ -larchive _static

Это будет ссылка на файл libarchive _static.a. Однако вам также необходимо определить LIBARCHIVE _STATIC в вашем коде.

Теперь проблема в том, что libarchive зависит от библиотек bzip2 (, а также от других ).и если у вас нет их статической сборки, вы получите ошибки компоновщика, например:

неопределенная ссылка на `BZ2 _bzCompressInit'

Вам нужна статическая сборка зависимых библиотек и аналогичная команда для компоновщика после команда libarchive:

-Lpath/to/bzip2/ -lbzip2

Вы можете либо собрать bzip2 из исходного кода, либо сделать это проще и получить предварительно -собранный двоичный файл из проекта Gnu32Win здесь:http://gnuwin32.sourceforge.net/packages.html

7
задан oggmonster 27 July 2012 в 07:32
поделиться