Не удается получить доступ к скомпилированной .so общей библиотеке Linux .so из Windows Mono C # Project - PullRequest
4 голосов
/ 25 октября 2010

Вот настройки:

У меня есть общая библиотека (c ++ с внешними методами "C"). Я скомпилировал в linux и создал файл library.so.

IЯ использовал Mono Develop на том же компьютере (Ubuntu) и смог DLLImport ("library.so") и без проблем получил доступ к моим внешним функциям.

Проблема возникает, когда я скопировал этот файл .so вWindows-машина (Win7) и я пытаюсь сделать то же самое, но на этот раз при запуске Mono под Windows с MonoDevelop.

Я получаю исключение System.BadImageFormatExmat.Я пытался сделать «./» перед файлом library.so, но ничего не помогает.Я проверил и дважды проверил, что он смотрит на правильный каталог, и он.

Есть ли что-то большое, чего мне не хватает, почему я не могу получить доступ к этому .so-файлу в Windows / Mono?

Ответы [ 2 ]

8 голосов
/ 25 октября 2010

Вы не можете использовать двоичный файл .so elf в Windows для своего собственного кода. Вам нужно перекомпилировать его в собственный двоичный файл, поддерживаемый Windows (а именно .dll).

Я предлагаю вам прочитать нашу вики-страницу о межплатформенном взаимодействии между управляемым неуправляемым кодом.

2 голосов
/ 25 октября 2010

Проблема в том, что Linux SO не является допустимым образом Windows. Вам нужно будет скомпилировать код C ++ под windows в виде DLL и экспортировать метод, чтобы вы могли вызывать его с помощью p / Invoke.

C / C ++ переносим (в основном) на исходном уровне, а не на двоичном, поэтому вы не можете скопировать Linux .so в Windows и ожидать, что он будет исполняемым на платформе Windows. Я уверен, что это поднимает вопрос, почему вы можете скопировать ваши .NET / Mono dll и exe из окна в Linux и запустить их, потому что в имплементации Mono CLI есть код, который может загрузить IL из образа Windows PE), а затем выполнить загруженный IL в ВМ, поэтому в данном случае выполняется не собственный двоичный код, а только зависимый от платформы IL, который загружается из файла контейнера DLL / EXE.

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