2009-06-05 8 views
2

..., a последующий до this.устранение проблемы несовместимости между компиляторами с динамическими библиотеками C++

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

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

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

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

ответ

3

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

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

спасибо за указание (извините): s aying «проблема не существует со статическими библиотеками», это просто неправильно. Я исправлю это сейчас. – zyndor

 Смежные вопросы

  • Нет связанных вопросов^_^