Использование обоих .so и .dll в Windows - PullRequest
3 голосов
/ 13 июля 2010

Я пишу программу для Windows на C ++, в которой пользователи смогут компилировать расширения в форме динамически подключаемых библиотек (windows) или общих объектных файлов (linux).

В Windows вы используете функцию LoadLibrary для загрузки DLL. Можно ли сделать то же самое для файлов .so в Windows и наоборот, загрузить DLL в Linux?

Ответы [ 3 ]

5 голосов
/ 13 июля 2010

Краткий ответ «Нет»

Это не о загрузке, а о внутреннем формате динамической библиотеки, такой как ожидаемые точки входа.Каждая операционная система поддерживает свой собственный формат.Следовательно, он не будет работать.

  • DLL - это исполняемый файл PE (как и exe для windows)
  • .so, как правило, в формате ELF (как большинство современных исполняемых файлов в Linux / Unix).

Однако в Linux есть некоторая поддержка исполняемого файла PE через Wine, и программа Wine может использовать DLL.Но это, вероятно, не то, что вы ищете.

В Windows также есть некоторая поддержка формата ELF через cygwin, а также есть некоторые компиляторы, которые могут загружать формат coff (тот, который использовался в Unix до ELF).Я использовал DJGPP для этого очень давно.

2 голосов
/ 13 июля 2010

AFAIK, они так, что Windows и Linux обрабатывают вызовы общих функций, очень разные (например, как переменные хранятся в стеке), поэтому файлы .so не будут работать на платформе Win32, а .dll не будут работать наLinux.

2 голосов
/ 13 июля 2010

DLL и SO - это принципиально разные форматы, поэтому, короче говоря, нет, вы не можете загрузить DLL в Linux или SO в Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...