Monodevelop를 사용하고 있으며 C로 작성된 공유 객체 파일을 호출하는 C# 주 프로그램이 있습니다. 솔루션을 성공적으로 빌드하지만 실행하려고하면 위의 System.DllNotfoundException 및 치명적으로 처리되지 않은 예외가 모두 같은 공유 오브젝트 파일.System.DllNotFoundException - SO 파일을 어떻게 가져 옵니까?
나는 다음과 같은 살펴 보았다 : - : https://www.cyberciti.biz/faq/linux-setting-changing-library-path/
의 ldconfig -v의 출력을 보여줍니다 -이 Calling UNIX and Linux \t shared object file \t .so from c# http://mono.1490590.n4.nabble.com/Adding-libraries-to-monodevelop-td1500573.html http://www.mono-project.com/docs/advanced/pinvoke/dllnotfoundexception/ http://www.mono-project.com/docs/advanced/pinvoke/
및 SO 여기에 당 파일의 경로를 설정 올바른 폴더는 있지만 .SO 파일은 아닙니다. 링크 중 하나는 SO 파일의 이름이 무엇인지는 중요하지 않지만 관련성이있는 경우 광산은 'lib'로 시작하지 않는다고 제안합니다.
이 응용 프로그램은 이전에 회사에서 구매했기 때문에 구입했지만, Monodevelop 또는 Linux 플랫폼의 C#에 익숙하지 않았습니다.
프로젝트는 정상적으로 빌드되지만 SO 파일을 찾을 수 없으므로 실행되지 않습니다.
또한 SOode 파일을 Monodevelop의 솔루션에 포함시키고 Build Action 옵션에서 EmbeddedResource로 설정했습니다. 이것이 필요하거나 맞는지 확실하지 않습니다.
C# 코드는 호출 -
[DllImport("xxxxxx.so")]
protected static extern Int32 xxxxxx_init();
모든 SO 파일 같은 관련된 몇 가지 더 전화가있다.
는 어떤 도움을 기꺼이
UPDATE 6 월 12 일 J
항상 :) 받은 : - 그래서, 나는 로그 파일을 통해 보면서 문제의 전체 힙을했습니다. .SO 파일을 찾을 수 없으므로 LDCONFIG를 관련 디렉토리로 업데이트했습니다.도움이되었지만 .SO 파일을 찾는 데 도움이되었습니다. 원래의 .SO 파일은 32 비트로 만들어졌고 Monodevelop의 64 비트 버전이므로로드되지 않습니다.
Monodevelop에서 C# 코드를 컴파일하여 32 비트 실행 파일을 만들 수있는 방법이 있습니까? 아니면 공유 객체 파일을 64 비트 버전으로 다시 컴파일해야합니까? (내가 웹에서 찾은 정보에서 내 의심은 후자이지만 나도 희망이있다!)
흥미롭게도, 디버그가 application.exe.so가 발견되지 않는 것을 주장되어 하나가 있었다 . System.Windows.Forms.dll이 .so (System.Windows.Forms.dll.so)로 표시 되기는하지만 System.Windows.Forms.dll과 너무 흡사합니다. 참조 파일 중 일부가있는 것처럼 보입니다. 제대로 포함되지 않았습니다. – Jason
@ Jason 연결된 Mono 문서에는 단락이 있다고 생각합니다. '.so'를 찾기위한 표준 위치를 포함하지 않는 것에 관한 것. 아니면'.dll' <->'.so' 매핑이 깨졌습니다. 죄송합니다. 내가있는 곳에서 놀 수는 없습니다. (리눅스도 모노도 없습니다) –
내가 놓친 부분이나 놓친 부분이 있는지, 잘못 설정했는지 확인합니다. – Jason