下面是设置:
我在linux中编译了一个共享库(带有外部"C“方法的c++),并创建了一个library.so文件。
我已经在同一个机器(Ubuntu)上使用过Mono Develop,并且能够DLLImport("library.so")和访问我的外部函数没有问题。
当我将.so文件复制到windows机器(Win7)上并尝试执行相同的操作时,问题就出现了,但这次是在windows下使用MonoDevelop运行Mono。
我得到了一个System.BadImageFormatException。我已经尝试在library.so文件之前执行"./“,但是没有任何帮助。我已经一遍又一遍地检查它是否在查找正确的目录,确实如此。
为什么我不能在Windows/Mono下访问这个.so文件?
发布于 2010-10-26 01:50:12
你不能在你的原生代码中使用.so elf二进制文件。您需要将其重新编译为Windows支持的本机二进制文件(即.dll)。
我建议你阅读我们的wiki page about cross platform interop between managed an unmanaged code.
发布于 2010-10-26 01:48:14
问题是Linux SO不是一个有效的windows镜像。您需要将windows下的C++代码编译为DLL并导出该方法,以便可以使用p/Invoke调用它。
C/C++在源代码级别是可移植的(大部分),而不是在二进制级别,因此您不能将Linux .so复制到Windows并期望它在Windows平台上是可执行的。我确信这提出了一个问题,为什么可以将.NET/Mono DLL和EXE从Windows复制到Linux并让它们运行,这是因为Mono CLI实现的代码能够从Windows映像(PE)加载IL,然后在VM中执行加载的IL,所以在这种情况下执行的不是本机二进制代码,而是从DLL/EXE容器文件加载的依赖于平台的IL。
https://stackoverflow.com/questions/4017324
复制相似问题