Как использовать модуль C ++ из приложения Mono - PullRequest
0 голосов
/ 22 октября 2009

Я пытаюсь запустить свое приложение C # / C ++ в Linux после его разработки в Windows.

Небольшая его часть, FooLib, написана на C ++, а для повышения производительности - из C #. FooLib не использует системные вызовы, только стандартную функциональность C ++. Он экспортирует одну функцию, объявленную как:

extern "C" __declspec(dllexport) void Foo(float*, int, float*);

Он скомпилирован с Visual C ++. Я попытался запустить приложение под моно с Windows-скомпилированным FooLib.dll, но загрузка dll (DllImport) не удалась с:

Unhandled Exception: System.DllNotFoundException:Foo(single[2],int,single[])

Итак, что мне делать?

  • Изменить объявление экспорта каким-либо образом?
  • Скомпилируйте это в библиотеку .so с gcc в Linux, затем загрузите это?
  • Кросс-компилировать его в .dll с gcc в Linux, а затем загрузить это?
  • Что-то еще?

Ответы [ 2 ]

2 голосов
/ 22 октября 2009

Вам нужно перекомпилировать вашу библиотеку в Linux, вы получите foolib.so. Затем вам нужно создать DllMap ( проверьте эту ссылку ), чтобы вам не приходилось указывать имя библиотеки * .so для Linux в вашем коде C # и отдельную * .dll для Windows - это просто способ удобного сопоставления имени библиотеки в зависимости от ОС.

0 голосов
/ 23 октября 2009

Очень крутой инструмент для автоматизации нативных привязок - SWIG. http://www.swig.org/

Согласен с 1-м комментарием. Ваш код .NET должен нормально работать в Linux без какой-либо перекомпиляции, но ваш собственный вызов должен быть скомпилирован.

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