Модули с Libtool и LoadLibrary () в Windows - PullRequest
0 голосов
/ 19 августа 2011

Я пытаюсь написать кроссплатформенную программу на c ++, которая будет загружать определенные модули (разделяемые библиотеки) во время выполнения. Для этого я использую ClassLoader из Poco C ++ Libraries . Я написал цепочку компиляции с использованием autoconf, automake и libtool. Это не должно быть проблемой в среде Linux, но проблема возникает в Windows. Я использую MinGW и MSYS при компиляции, чтобы иметь возможность использовать мои Makefiles. ClassLoader использует специфичную для Windows функцию LoadLibrary () для загрузки модулей, что означает, что я должен скомпилировать их как DLL.

Класс, который я компилирую в библиотеку, наследует другой класс в основном приложении. Затем, когда я пытаюсь запустить make, он много жалуется на неопределенную ссылку и отказывается создавать общую библиотеку. Я предполагаю, что это из-за искажения имени. Или это потому, что я не могу наследовать класс вне библиотеки? (Этот класс не включен в исходные коды библиотеки, но заголовочный файл найден)

Я не совсем уверен, сколько неприятностей это принесет, я настаиваю на компиляции под MinGW + MSYS, но все еще использую LoadLibrary (). Кто-нибудь с таким опытом?

1 Ответ

0 голосов
/ 21 апреля 2012

В Windows DLL должна иметь разрешение всех своих символов при сборке.В Unix вы можете оставить вещи нерешенными до времени загрузки, и это поведение в настоящее время включено в ваш проект.

Чтобы изменить это, вам, вероятно, придется выделить базовый класс в основном приложении (и все остальное).иначе, от чего зависит DLL) в свою собственную DLL.Таким образом, когда вы связываете свою библиотеку с этими подклассами, она может связываться с новой DLL и полностью разрешать ее символы.Суть в том, что вы должны быть в состоянии построить эту новую DLL со всеми ее символами.

...