устранение проблемы несовместимости между компиляторами с динамическими библиотеками C++

StackOverflow https://stackoverflow.com/questions/956310

Вопрос

..., продолжение этот.

Из ответов, которые мне дали на мой указанный вопрос, я узнал, что:

  • разные компиляторы используют разное оформление имени, что делает невозможным использование динамической библиотеки C++, созданной с помощью компилятора A, в проекте, созданном с помощью компилятора B,
  • библиотека может быть построена как статическая, сохраняя при этом n заголовочных и исходных файлов в проекте или экспортируя символы.(Пересборка библиотеки для использования с другим компилятором все равно не спасет.)

Присмотревшись к SDL в свете сказанного, я понял, что его связь имеет два уровня:в моем проекте SDL я статически связываюсь с libSDL.a, который, в свою очередь, динамически связывается с SDL.dll, тем самым устраняя необходимость в разных версиях .dll для разных компиляторов.

Вопрос в том, действительно ли это так и есть ли жизнеспособное решение проблемы, или я что-то (и что) упускаю?

Это было полезно?

Решение

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

  • Чтобы dll могла использоваться разными компиляторами, она должна содержать только функции C (их можно скомпилировать с помощью компилятора C++, используя extern C)
  • Как обычно с dll, можно использовать статическую библиотеку импорта, чтобы функции в dll можно было вызывать напрямую, а не загружать по имени.
  • Вместо обычной библиотеки импорта вы можете использовать библиотеку-оболочку, которая обертывает функции C dll в классы и функции C++.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top