모노 앱에서 C ++ 모듈을 사용하는 방법
-
05-07-2019 - |
문제
Windows에서 개발 한 후 Linux에서 C#/C ++ 앱을 실행하려고합니다.
그것의 작은 부분 인 Foolib는 C ++로 작성되었으며 성능을 위해 C#에서 핀으로 표시됩니다. Foolib는 시스템 호출이 없으며 표준 C ++ 기능 만 사용합니다. 단일 함수를 내보내고 다음과 같이 선언합니다.
extern "C" __declspec(dllexport) void Foo(float*, int, float*);
Visual C ++로 컴파일됩니다. 나는 Windows에 대한 컴파일 된 gelib.dll로 모노 아래에서 앱을 실행하려고 시도했지만 dll로드 (dllimport)는 다음과 같이 실패했습니다.
Unhandled Exception: System.DllNotFoundException:Foo(single[2],int,single[])
그래서, 내가 뭘해야 해?
- 어떤 식 으로든 수출 선언을 변경합니까?
- Linux의 GCC를 사용하여 물건을 .So 라이브러리로 컴파일 한 다음로드합니까?
- Linux의 GCC와 함께 CrossCompile It로.
- 다른 것?
해결책
Linux에서 라이브러리를 다시 컴파일해야합니다. Foolib.So도 얻을 수 있습니다. 그런 다음 dllmap을 만들어야합니다 (이 링크를 확인하십시오) C# 코드에서 Linux의 라이브러리 이름과 Windows의 별도 *.dll을 지정할 필요가 없습니다. 이는 OS에 따라 라이브러리 이름을 편리하게 매핑하는 방법 일뿐입니다.
다른 팁
기본 바인딩을 자동화하기위한 매우 멋진 도구는 SWIG입니다.http://www.swig.org/
첫 번째 의견에 동의합니다. .NET 코드는 다시 컴파일하지 않고 Linux에서 정상적으로 실행되지만 기본 호출을 기본적으로 컴파일해야합니다.
제휴하지 않습니다 StackOverflow