2013-03-26 2 views
2

나는 리눅스와 윈도우 모두에 대해 int MyFunc() 메소드를 내보내는 C++ 공유 라이브러리를 가지고있다.DllImport가 "__Internal"과 함께 작동하지 않는 이유는 무엇입니까?

C#에서 나는 MyFunc을 다음 서명으로 호출합니다.

[DllImport(@"__Internal", CharSet = CharSet.Ansi, EntryPoint = "MyFunc")] 
static extern unsafe int MyFunc(); 
// Later I'm using : 
MyFunc(); 

이 코드는 윈도우에서 잘 작동하지만 리눅스 내에서이 예외 EntryPointNotFound을 던져.

-rdynamic 옵션을 사용하여 C++ 라이브러리를 컴파일했고, MyFunc가 nm과 함께 D 플래그로 내보내졌지만이 또한 도움이되지 않습니다.

DllImport(@"__Internal"DllImport(@"mys.so"으로 바꾸면 아무런 변화없이 리눅스에서 정상적으로 작동하지만 다음은 호환되지 않는 코드 교차 기능이있는 창에서 DllImport(@"mys.dll"을 사용해야합니다.
그래서 이것을 피하고 싶습니다.

리눅스에서 __Internal이 작동하지 않는 이유는 무엇입니까?
모노를 사용하고 있습니다.

Linux에서이 기능이 작동하지 않는 이유는 무엇입니까?

답변

5

당신은 모두 윈도우와 리눅스에서이를 사용할 수 있습니다

[DllImport ("mys")] 

적절한 확장은 플랫폼에 따라 추가됩니다 (이것은 .NET 및 모노 모두에서 작동).

+0

감사합니다. 이것은 내 문제를 해결했습니다. 그러나 그 문제가 무엇인지 아십니까? –

+1

"__Internal"은 기호가 실행 파일에 정의 된 경우에만 사용됩니다. 대신 동적 라이브러리가있는 것 같아서 라이브러리 이름을 사용해야합니다. –

관련 문제