устранение проблемы несовместимости между компиляторами с динамическими библиотеками C ++ - PullRequest
2 голосов
/ 05 июня 2009

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

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

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

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

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

1 Ответ

3 голосов
/ 05 июня 2009

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

  • Чтобы dll могла использоваться различными компиляторами, она должна содержать только функции C (они могут быть скомпилированы с использованием компилятора C ++ с использованием extern C)
  • Как обычно с dll, можно использовать статическую библиотеку импорта, чтобы функции в dll могли вызываться напрямую, а не загружаться по имени
  • Вместо обычной библиотеки импорта вы могли бы иметь библиотеку-обертку, которая оборачивает функции DLL библиотеки C в классы и функции C ++
...