Соединение с MSVC DLL от MinGW

Я пытаюсь связать DSDK LizardTech GeoExpress в свое собственное приложение. Я использую gcc так, чтобы мы могли скомпилировать на для платформ. На Linux и Mac это работает легко: они обеспечивают статическую библиотеку (libltidsdk.a) и заголовки и все, что мы должны сделать, используют их.

Компиляция для окон не так легка. Они создали библиотеку с помощью Microsoft Visual Studio, и мы используем MinGW. Я считал MinGW FAQ, и я сталкиваюсь с проблемами ниже. Библиотекой является весь C++, таким образом, мой первый вопрос: это даже возможно?

Просто соединение против dll как предусмотрено приводит "к неопределенным ссылочным" ошибкам для всех вызовов C++ (конструкторы, деструкторы, методы, и т.д.).

На основе MinGW Wiki: http://www.mingw.org/wiki/MSVC%5Fand%5FMinGW%5FDLLs я должен смочь использовать утилиту reimp преобразовать .lib во что-то применимое. Я попробовал все .lib файлы, обеспеченные LizardTech, и они все дают "недопустимой или коррумпированной библиотеке импорта". Я попробовал обе версии 0.4 и 0.3 reimp утилиты.

Используя второй метод, описанный в Wiki, я выполнил pexport и dlltool по dll для получения архива.a, но это производит те же неопределенные ссылки.

BTW: Я считал обсуждение ниже. Это оставило некоторую неоднозначность относительно того, возможно ли это, и, учитывая страницу MinGW Wiki кажется, что это должно быть выполнимо. Если это невозможно, это - все, что я должен знать. Если бы это может быть сделано, я хотел бы знать, как я могу заставить это происходить.

То, как связаться с VS2008, генерировало .libs от g ++

Спасибо!

29
задан Community 23 May 2017 в 12:17
поделиться

3 ответа

Вы не можете этого сделать. Они экспортировали классы C ++ из своей dll, а не C-функции. Разница в том, что функции C ++ всегда экспортируются с именами в искаженной форме, специфичной для конкретной версии компилятора.

Их dll может использоваться msvc только в этой форме, и, вероятно, не будет работать даже между разными версиями msvc, поскольку Microsoft уже изменила свою схему преобразования.

Если у вас есть рычаги воздействия, вам нужно заставить их изменить свои злые пути. В противном случае вам нужно будет использовать MSVC для написания dll-оболочки оболочки, которая будет импортировать все классы и повторно экспортировать их через функции c, возвращающие интерфейсы.

25
ответ дан 28 November 2019 в 02:03
поделиться

Я почти уверен, что вы не можете связать библиотеки C ++ между подобными компиляторами. Я очень старался, но это было давно, и я не помню подробностей. Я думаю, что для библиотек C это возможно, с большим количеством хаков.

3
ответ дан 28 November 2019 в 02:03
поделиться

Чтобы использовать DLL в Windows, вы связываете ее с библиотекой импорта (а не с самой DLL). Библиотеки импорта обычно имеют расширение .lib (как и статические библиотеки). Если вы загрузите Windows SDK, вы получите библиотеки импорта для всех системных библиотек DLL.

Судя по вашему вопросу, похоже, что вы перепутали .dll с .lib. Вы уверены, что reimp не принимает DLL в качестве входных данных и не создает библиотеку импорта .LIB, совместимую с MinGW?

Я только что поискал MinGW в Википедии. Согласно этой статье, MinGW поставляется с распространяемыми библиотеками импорта.

0
ответ дан 28 November 2019 в 02:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: