Mono无法加载dll

时间:2014-03-26 18:27:25

标签: mono pinvoke monodevelop

我正在尝试通过P / Invoke加载使用本机共享库。但是,它不会从MonoDevelop下加载。这是包含MONO_LOG_LEVEL=debugMONO_LOG_MASK=dll的控制台输出:

Creating a V8Engine instance ...Mono: DllImport attempting to load: 'V8_Net_Proxy'.
Mono: DllImport error loading library '/localhome/rryk/v8netmonolinux/Source/bin/Debug/libV8_Net_Proxy': '/localhome/rryk/v8netmonolinux/Source/bin/Debug/libV8_Net_Proxy: cannot open shared object file: No such file or directory'.
Mono: DllImport error loading library '/localhome/rryk/v8netmonolinux/Source/bin/Debug/libV8_Net_Proxy.so': 'libv8-x64.so: cannot open shared object file: No such file or directory'.

但是,libv8-x64.solibV8_Net_Proxy.so位于同一目录中:

/localhome/rryk/v8netmonolinux/Source/bin/Debug [mono-linux *]$ ls
libV8_Net_Proxy.so  V8.Net.Console.exe.config  V8.Net.dll.mdb                  V8.Net.Proxy.Interface.x64.dll      V8.Net.SharedTypes.dll.mdb  x64
libv8-x64.so        V8.Net.Console.exe.mdb     V8.Net.Proxy.Interface.dll      V8.Net.Proxy.Interface.x64.dll.mdb  V8.Net.SharedTypes.XML      x86
V8.Net.Console.exe  V8.Net.dll                 V8.Net.Proxy.Interface.dll.mdb  V8.Net.SharedTypes.dll              V8.Net.XML

更有趣的是,同样的应用程序在从控制台执行时加载库就好了:

/localhome/rryk/v8netmonolinux/Source/bin/Debug [mono-linux *]$ MONO_LOG_LEVEL=debug MONO_LOG_MASK=dll mono V8.Net.Console.exe

Creating a V8Engine instance ...Mono: DllImport attempting to load: 'V8_Net_Proxy'.
Mono: DllImport error loading library '/localhome/rryk/v8netmonolinux/Source/bin/Debug/libV8_Net_Proxy': '/localhome/rryk/v8netmonolinux/Source/bin/Debug/libV8_Net_Proxy: cannot open shared object file: No such file or directory'.
Mono: DllImport loaded library '/localhome/rryk/v8netmonolinux/Source/bin/Debug/libV8_Net_Proxy.so'.

我还检查了在控制台和MonoDevelop中使用相同的单声道二进制文件。实际上我无法检查MonoDevelop使用的是哪个二进制文件,但设置中的.NET Runtimes部分显示版本3.0.12。系统中只有一个具有此版本的Mono二进制文件,默认情况下是命令行中使用的那个(因为它在whichis中首先列出):

~$ whereis mono
mono: /usr/bin/mono /etc/mono /usr/lib/mono /usr/bin/X11/mono /usr/local/bin/mono /usr/local/etc/mono /usr/local/lib/mono /usr/share/mono /usr/share/man/man1/mono.1.gz

导致差异的原因是什么?为什么Mono找不到libv8-x64.so,它位于同一个目录中?

1 个答案:

答案 0 :(得分:1)

尝试:

LD_LIBRARY_PATH=`pwd` mono V8.Net.Console.exe