首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从Windows Mono C#项目访问Linux gcc编译的.so共享库

问无法从Windows Mono C#项目访问Linux gcc编译的.so共享库
EN

Stack Overflow用户
提问于 2010-10-26 01:43:38
回答 2查看 1.5K关注 0票数 4

下面是设置:

我在linux中编译了一个共享库(带有外部"C“方法的c++),并创建了一个library.so文件。

我已经在同一个机器(Ubuntu)上使用过Mono Develop,并且能够DLLImport("library.so")和访问我的外部函数没有问题。

当我将.so文件复制到windows机器(Win7)上并尝试执行相同的操作时,问题就出现了,但这次是在windows下使用MonoDevelop运行Mono。

我得到了一个System.BadImageFormatException。我已经尝试在library.so文件之前执行"./“,但是没有任何帮助。我已经一遍又一遍地检查它是否在查找正确的目录,确实如此。

为什么我不能在Windows/Mono下访问这个.so文件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-26 01:50:12

你不能在你的原生代码中使用.so elf二进制文件。您需要将其重新编译为Windows支持的本机二进制文件(即.dll)。

我建议你阅读我们的wiki page about cross platform interop between managed an unmanaged code.

票数 8
EN

Stack Overflow用户

发布于 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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4017324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档