ubuntu中的单声道和非托管代码

时间:2013-01-16 13:52:25

标签: linux mono 64-bit unmanaged

我正在使用Mono 2.10 在Ubuntu 12 x64上运行。 现在我需要知道如何使用非托管代码。

[DllImport("libc.so")]
public static extern int getpid ();

而且,在下一步我有:

getpid();

我接受了这个错误

$ MONO_LOG_LEVEL="debug" MONO_LOG_MASK="dll" mono libc_test.exe
Mono: DllImport attempting to load: 'libc.so'.
Mono: DllImport loading library:     '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so'.
Mono: DllImport error loading library '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so: cannot open shared     object file: No such file or directory'.
Mono: DllImport loading library:     '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so'.
Mono: DllImport error loading library     '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so: cannot open shared     object file: No such file or directory'.
Mono: DllImport loading location: 'libc.so'.
Mono: DllImport error loading library: '/usr/lib/x86_64-linux-gnu/libc.so: invalid     ELF header'.
Mono: DllImport loading location: 'libc.so'.
Mono: DllImport error loading library: '/usr/lib/x86_64-linux-gnu/libc.so: invalid     ELF header'.
Mono: DllImport loading: 'libc.so'.
Mono: DllImport error loading library '/usr/lib/x86_64-linux-gnu/libc.so: invalid     ELF header'.
Mono: DllImport unable to load library '/usr/lib/x86_64-linux-gnu/libc.so: invalid     ELF header'.
Mono: DllImport attempting to load: 'libc.so'.
Mono: DllImport loading library:     '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so'.
Mono: DllImport error loading library     '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so: cannot open shared     object file: No such file or directory'.
Mono: DllImport loading library:     '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so'.
Mono: DllImport error loading library         '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so: cannot open shared     object file: No such file or directory'.
Mono: DllImport loading location: 'libc.so'.
Mono: DllImport error loading library: '/usr/lib/x86_64-linux-gnu/libc.so: invalid     ELF header'.
Mono: DllImport loading location: 'libc.so'.
Mono: DllImport error loading library: '/usr/lib/x86_64-linux-gnu/libc.so: invalid ELF header'.
Mono: DllImport loading: 'libc.so'.
Mono: DllImport error loading library '/usr/lib/x86_64-linux-gnu/libc.so: invalid ELF header'.
Mono: DllImport unable to load library '/usr/lib/x86_64-linux-gnu/libc.so: invalid ELF header'.
Hello Linux!
Mono: DllImport attempting to load: 'libc.so'.
Mono: DllImport loading library: '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so'.
Mono: DllImport error loading library '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so: cannot open shared     object file: No such file or directory'.
Mono: DllImport loading library: '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so'.
Mono: DllImport error loading library '/home/ibaranov/Documents/MONO/libc_test/libc_test/bin/Debug/libc.so: cannot open shared object file: No such file or directory'.
Mono: DllImport loading location: 'libc.so'.
Mono: DllImport error loading library: '/usr/lib/x86_64-linux-gnu/libc.so: invalid ELF header'.
Mono: DllImport loading location: 'libc.so'.
Mono: DllImport error loading library: '/usr/lib/x86_64-linux-gnu/libc.so: invalid ELF header'.
Mono: DllImport loading: 'libc.so'.
Mono: DllImport error loading library '/usr/lib/x86_64-linux-gnu/libc.so: invalid ELF header'.
Mono: DllImport unable to load library '/usr/lib/x86_64-linux-gnu/libc.so: invalid ELF header'.

Unhandled Exception: System.DllNotFoundException: libc.so
  at (wrapper managed-to-native) libc_test.LibC:getpid ()
  at libc_test.MainClass.Main (System.String[] args) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.DllNotFoundException: libc.so
  at (wrapper managed-to-native) libc_test.LibC:getpid ()
  at libc_test.MainClass.Main (System.String[] args) [0x00000] in <filename unknown>:0 

我一直试图解决这个问题很长一段时间,但我尝试过的任何事都没有帮助我。 我用:

 dlopen("libc.so", RTLD_NOW);

也许我需要为x64编译libc.so?

3 个答案:

答案 0 :(得分:6)

应该是

[DllImport("libc.so.6")]

或只是

[DllImport("libc")]

“libc”是来自/ etc / mono / config的别名, 在GNU / Linux系统上: ... <dllmap dll="libc" target="libc.so.6" os="!windows"\> ...

答案 1 :(得分:4)

在x64位ubuntu 12中解决此问题

cd /lib/x86_64-linux-gnu
ln -s libc.so.6 libc.so

答案 2 :(得分:0)

要使用tarball编译的单声道4.0.2在Raspberry Pi上解决Raspbian,我这样做了

sudo cp /lib/arm-linux-gnueabihf/libc.so.6 /lib/libc

/lib是默认搜索文件夹之一