Можно ли использовать одну и ту же DLL для клиентов, использующих как Windows, так и Linux - PullRequest
3 голосов
/ 28 марта 2012

Я хочу создать библиотеку C ++, которая может использоваться как клиентами Linux, так и Windows. Специфическая функциональность ОС будет подключена клиентом путем реализации интерфейсов, предоставляемых библиотекой.

Можно ли этого достичь? Нужно ли перекомпилировать проект C ++ снова в Linux.

P.S .: Я использую IDE CodeBlocks

Ответы [ 3 ]

4 голосов
/ 28 марта 2012

Короткий ответ - нет, вам все равно нужно скомпилировать библиотеку для каждой целевой платформы - однако, предполагая, что ваш код написан так, что он кроссплатформенный, вы можете настроить свою сборку для сред Windows и Linuxс небольшой суетой.Я делаю это сейчас, используя CMake для генерации как проектов Visual Studio для сред Windows, так и Makefiles для сред Linux.

2 голосов
/ 28 марта 2012

Я довольно уверен, что Linux не примет .dll :) И да, вам нужно будет перекомпилировать.Если вы не запускаете Windows как виртуальную машину под Linux, которая как бы вытесняет вопрос.

1 голос
/ 29 марта 2012

Это, конечно, не может быть тот же двоичный файл: общий формат объектов ELF в Linux, формат DLL "PE" в Windows. А динамическая загрузка имеет разную семантику в обеих системах. Подробности см. В компоновщике и загрузчике Levine .

Если вы все сделаете аккуратно, у вас может быть один и тот же исходный код, дающий два разных файла (DLL в Windows, динамический общий объект в Linux).

Но вам, вероятно, понадобятся некоторые условные приемы компиляции, такие как #ifdef WINDOWS и т.д ...

Вы можете использовать библиотеки, предоставляющие вам общую абстракцию для таких вещей. Например, и GTK / Glib, и Qt имеют некоторый механизм, дающий общую абстракцию динамически связанных (или динамически загружаемых - т.е. dlopen -ed) библиотек.

Возможно, вы хотите прочитать Руководство по библиотеке программ (по крайней мере, для Linux).

...