Я уже некоторое время использую 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