Как связать файл .so с управляемой DLL с помощью моно - PullRequest
0 голосов
/ 24 августа 2018

Я пишу программу для встроенного linux на процессоре ARM в .net, которая использует mono для выполнения.Я обнаружил, что могу просто скомпилировать на своем компьютере архитектуру x86 или x64, скопировать каталог Debug в linux и запустить программу, используя моно myProgram.exe.Программа работает идеально, как это, и моно, кажется, заботится о несоответствии архитектуры.Это было верно до сегодняшнего дня, когда я попытался включить внешнюю собственную DLL.

У меня есть как x86, так и x64-битная архитектура внешней DLL, и обе прекрасно работают в среде рабочего стола.У меня есть класс shim, который использует [DllImport] для загрузки внешних функций.Однако, когда я пробую это на встроенном Linux с Mono, я получаю исключение BadImageFormat.Я предполагаю, что Mono каким-то образом переводит скомпилированные библиотеки DLL в исполняемый файл при запуске, но не делает то же самое для внешнего.

Некоторая другая информация: 1. У меня нет источника для собственной внешней библиотеки,У меня есть x86, x64 и библиотека .so.2. Я попытался создать управляющую оболочку C ++, которая обращается к .so, но не может его скомпилировать на рабочем столе, поскольку Windows не распознает файл .so.

Некоторые мысли: 1. Есть лиспособ встраивания нативной DLL в управляемую, чтобы Mono также перенесла нативную DLL?2. Могу ли я связать файл .so с управляемым проектом C ++?3. Есть ли способ сказать Mono, чтобы он включал эту Dll во время выполнения?

В конечном счете, я ищу решение, которое обернуто в exe, которое позволяет мне просто запустить его, как я делал раньше, и контролироватьродная система.

1 Ответ

0 голосов
/ 24 августа 2018

Если у вас есть все файлы .dll и .so для Windows и Linux, вы, вероятно, можете использовать функцию dll maps в Mono. (https://www.mono -project.com / docs / advanced / pinvoke / dllmap / ), которые используются для сопоставления имен dll Windows с Linux и именами.

.Net не распознает это, но Mono распознает.

...