Как сделать ссылку на xxx.dll, если провайдер поставляет его только с xxx.lib, и вы используете MinGW-w64, а не MSV C? - PullRequest
0 голосов
/ 05 февраля 2020

Firebird и Boost сообщества предоставляют xxx.lib только для своих предварительно собранных xxx.dll двоичных файлов,

и я использую MinGW-w64 v7.0.0 с G CC v8.1.0 ,

, и этот последний ожидает libxxx .a файл, содержащий все функциональные символы xxx.dll для ссылки.

Для Boost , я могу собрать его из исходного кода для MinGW-w64 (хотя я все еще предпочитаю использовать предварительно собранные, потому что процесс сборки для таких больших наборов инструментов, как этот, занимает вечность).

Что касается Firebird , то это сборка невозможна при использовании MinGW-w64 , за исключением случаев, когда исправления внесены, и я не могу гарантировать, что пропатченные исходные файлы произведут безопасный fbclient.dll для производства.

И я слышал, что более новые версии MinGW-w64 принимают прямую ссылку на .dll ,

Это правда? это всего лишь MinGW-w64 .dll с, только C .dll с или включая C ++ , или любые другие .dll включая MSV C единицы.

Вы можете сказать: " Почему бы мне просто не использовать Msys2!? "

  1. Msys2 - это программное обеспечение, основанное на патчах, и я видел много библиотек, таких как libcurl , которые до сих пор не являются полностью c (версия * stati c, .a один, а не .dll.a один) все еще зависит от одного или нескольких внешних .dll с (не системных).
  2. Msys2 - это Dwarf2 на основе обработки исключений, и я использую sjlj one.
  3. Msys2 использует очень последние цепочки инструментов v9.2.0 и такие библиотеки, как winpthreads , libwinpthread и zstd , которые больше не поддерживаются в Windows XP (Windows XP !? ДА , большинство моих клиентов все еще используют его), поэтому я должен понизить цепочка инструментов.

Итак, какие у меня есть варианты, для ссылки здесь?

TIA.

1 Ответ

0 голосов
/ 08 февраля 2020

Windows DLL не могут быть связаны с исполняемыми программами. Для связи мы должны создать экспортную библиотеку для mingw-w64. В этом ответе предполагается, что вы уже установили mingw-w64 в своей среде разработки, а инструменты mingw-w64 доступны в командной строке.

Библиотека экспорта может быть создана из файла DLL или LIB. Здесь процедура следует из файла DLL. Откройте командную строку. Предположим, что DLL foo.dll.

  • Создать файл определения экспорта с gendef:
gendef.exe foo.dll

Эта команда принимает foo.dll и генерирует foo.def.

  • Создать библиотеку экспорта с помощью dlltool:
dlltool.exe --dllname foo.dll --input-def foo.def --output-lib libfoo.a

Эта команда принимает foo.def и foo.dll и генерирует libfoo.a. Помните, что имя экспортируемой библиотеки libfoo.a начинается с lib-, но во время компиляции / компоновки опция связывания должна быть -lfoo в случае G CC. Сгенерированная библиотека экспорта libfoo.a содержит только символы, экспортируемые из библиотеки DLL, ее нельзя использовать для установления связи c.

Процедура не зависит от того, является ли хост MSYS2 или MinGW-w64 или кросс-компилятор в любом дистрибутиве GNU / Linux.

Дополнительные сведения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...