문제

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에서 정상적으로 실행되지만 기본 호출을 기본적으로 컴파일해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top