| 

.NET C# Java Javascript Exception

1
Hallo zusammen,

Ich habe eine kleine shared Library in C++ geschrieben, die ich in meinem C#-Programm aufrufen möchte.

Das ganze soll auf einem 32Bit System laufen.

#include <iostream>

extern "C" void HelloWorld()
{
std::cout << "Hello World" << std::endl;
}

extern "C" int Test(int a,int b)
{
std::cout << "Hello World" << std::endl;
return a + b;
}


Das Erstellen funktioniert so (32Bit):

g++ -c -fpic test.cpp -m32
g++ -shared -fpic -o libtest.so test.o -m32


Mein C# Programm dazu sieht so aus:

using System;

using System.ComponentModel;
using System.Runtime.InteropServices;

public class Test
{
[DllImport("libdl.so")]
static extern IntPtr dlopen(string filename, int flags);

[DllImport("libdl.so")]
static extern IntPtr dlclose(IntPtr handle);

[DllImport ("./libtest.so")]
private static extern void HelloWorld();

[DllImport ("./libtest.so",EntryPoint="Test")]
private static extern int Testl(int a,int b);

public static int Main(string[] args)
{
IntPtr handle = dlopen("./libtest.so",2);
if(handle == IntPtr.Zero)
{
Console.WriteLine("Error loading shared library");
return -1;
}

HelloWorld();
int ret = Testl(116,1);
Console.WriteLine("Result from shared-Librarry Call: " + ret);

dlclose(handle);
return 0;
}
}


Mein System:
Ubuntu Linux 10.04 x86_64
Mono C# compiler version 2.4.4.0

Das Problem:
Das Laden von libtest.so schlägt fehl!
Setze ich "export MONO_LOG_LEVEL=debug" dann bekomme ich diese Meldung:

Mono-INFO: DllImport error loading library './libtest.so: falsche ELF-Klasse: ELFCLASS32'.


Vermutung:
Mono führt mein C# Programm im 64-Bit Modus aus, weswegen vermutlich die 32-Bit library nicht geladen werden kann. Baue ich die Library nämlich ohne -m32 als 64-Bit library funktioniert alles wunderbar!

Mein Mono-Compiler in Version 2.4.4 hat noch nicht die Möglichkeit mit /platform:x86 die Platform auszwählen, deswegen habe ich Version 2.10 installiert. Folgender Aufruf hat aber absolut keine Auswirkung?!

/opt/mono-2.10/bin/gmcs /platform:x86 sharpCall.cs



Hat jemand eine Idee was hier falsch läuft?
News:
13.03.2012
bennygr 53 5
TOP TECHNOLOGIES CONSULTING GmbH