Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.DllNotFoundException-如何导入SO文件?_C#_Linux_Mono - Fatal编程技术网

C# System.DllNotFoundException-如何导入SO文件?

C# System.DllNotFoundException-如何导入SO文件?,c#,linux,mono,C#,Linux,Mono,我使用的是Monodevelop,有一个C#主程序,它调用用C编写的共享对象文件。解决方案构建成功,但是当我尝试运行它时,我得到上面的System.DllNotfoundException和一个致命的未处理异常,两者都指向同一个共享对象文件 我看了以下几点:- 并在此设置SO文件的路径:- ldconfig-v的输出显示正确的文件夹,但不显示.SO文件。其中一个链接表明,SO文件的名称并不重要,但是如果相关,我的文件不会以“lib”开头 这个应用程序以前已经运行了,但是由于一家公司的收购,我

我使用的是Monodevelop,有一个C#主程序,它调用用C编写的共享对象文件。解决方案构建成功,但是当我尝试运行它时,我得到上面的System.DllNotfoundException和一个致命的未处理异常,两者都指向同一个共享对象文件

我看了以下几点:-

并在此设置SO文件的路径:-

ldconfig-v的输出显示正确的文件夹,但不显示.SO文件。其中一个链接表明,SO文件的名称并不重要,但是如果相关,我的文件不会以“lib”开头

这个应用程序以前已经运行了,但是由于一家公司的收购,我已经接管了它,我对Monodevelop,或者说linux平台上的C#不太熟悉

项目生成正常,但不会运行,因为找不到SO文件

我还将SO文件包括在Monodevelop的解决方案中,并将其设置为Build Action选项中的嵌入式资源。不确定这是必要的还是正确的

C代码调用:-

[DllImport("xxxxxx.so")]
protected static extern Int32 xxxxxx_init();
还有一些调用都与同一SO文件有关

一如既往地感激地接受任何帮助:) J

6月12日更新:- 所以,我查看了日志文件,发现了一大堆问题。找不到.SO文件,因此我已将LDCONFIG更新到相关目录

这很有帮助,但只是定位了.SO文件-它仍然不会像原始的.SO文件那样加载,所以创建的文件是32位的,而我的Monodevelop版本是64位的


有没有办法在Monodevelop中编译c#代码以形成32位可执行文件,或者我必须将共享对象文件重新编译成64位版本?(从我在网络上找到的信息来看,我的怀疑是后者,但我一直充满希望!)

免责声明:我对单声道没有经验(一点也不像)

您可能希望尝试检查
中是否存在某些依赖项。因此
本身

从(我看到您提到了这个链接,但您没有提到任何关于日志级别或检查依赖项的内容):

本机依赖项和p/Invoke

通过p/Invoke使用本机库时,您可能会看到类似的错误 当找不到库时。请注意,当本机库 加载时,本机库可能会尝试加载上的其他库 这也要视情况而定。任何失败似乎都会导致失败 DllNotFoundException,仅表示原始本机 找不到正在加载的库。因此,一个人可能会以失败告终 库就位时发生DllNotFoundException

可以通过设置调试日志级别来解决此问题:

$ MONO_LOG_LEVEL=debug mono YourApp.exe
<snip>
Mono-INFO: DllImport error loading library: 'Interop.so': '/usr/lib/Interop.so: undefined symbol: __some_function
<snip>
$MONO\u LOG\u LEVEL=debug MONO YourApp.exe
Mono INFO:DllImport加载库时出错:“Interop.so”:“/usr/lib/Interop.so:未定义的符号:u某些函数

有趣的是,调试说明找不到application.exe.so,尽管我不知道有。还有很多其他的东西它没有发现太像System.Windows.Forms.dll,尽管它也显示为.so(System.Windows.Forms.dll.so)-看起来有些参考文件没有被正确包含。@Jason我相信在链接的Mono文档中有一段关于它的内容。关于不包括要查找的标准位置的内容。或者可能是
.dll
。因此
映射被破坏。对不起,我不能在我所在的地方玩它(我既没有Linux也没有Mono),我会仔细研究一下,看看是否有一些设置我错过了或设置不正确。