Я в процессе переноса большого приложения C ++ из Linux (gcc) в Windows (Visual C ++ 2008) и у меня проблемы с компоновщиками с плагинами. В Linux это не было проблемой, так как .so поддерживает поиск символов времени выполнения, но, похоже, dll этого не поддерживает.
Некоторая справочная информация:
Приложение (хост), в котором размещается среда сценариев, предоставляет интерфейсы для плагинов (разделяемых библиотек, которые загружаются во время выполнения посредством вызовов API сценариев), что позволяет расширять узел и API сценариев без перекомпиляции приложения узла. В Linux это просто вопрос включения заголовков хост-приложения в исходный код плагина, но в Windows я получаю ошибки компоновщика. Я не совсем уверен, с чем мне нужно связать Visual C ++ для разрешения этих символов.
Одна из наших зависимостей (с открытым исходным кодом, LGPL) имеет объявления препроцессора, которые она использует для вставки __declspec (dllexport) и __declspec (dllimport) в свои заголовки. Некоторые предварительные исследования показывают, что мне, возможно, придется сделать это также, но я хотел бы быть уверен, прежде чем я начну модифицировать целую кучу заголовков ядра. (Ранее я мог заставить это работать на MinGW, но мы решили, что поддержка Visual Studio является обязательным требованием для такого рода коммерческих проектов.)
Мой вопрос в двух словах: Как связать загруженные во время выполнения dll с exe-хостом в Visual C ++?
Редактировать: Чтобы прояснить проблему с примером, в моем хост-приложении есть класс Object , который представляет базовый тип объекта, к которому может обращаться скрипт. В моих плагинах у меня есть ряд классов, которые расширяют Object для выполнения других функций, таких как интеграция поддержки сети или новых визуальных элементов. Это означает, что моя dll должна связываться с символами в exe хоста, и я не уверен, как это сделать.