Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Mono DLL打开相应的Windows/Mac DLL/DyLib_Macos_Mono_Native_Dllimport_Dylib - Fatal编程技术网

Macos Mono DLL打开相应的Windows/Mac DLL/DyLib

Macos Mono DLL打开相应的Windows/Mac DLL/DyLib,macos,mono,native,dllimport,dylib,Macos,Mono,Native,Dllimport,Dylib,我使用Mono在一组本机公开的命令上编写包装器 该集合是相同的(命令和签名),但是它是通过Windows中的DLL和Mac中的动态库公开的 我想知道是否有一种方法可以让我只创建一个包装器.NET/Mono DLL,同时让它自己找到正确的库来导入 如果是,语法是什么?如果不是,将DllImport与我要编译的2个不同操作系统分开的编译器定义是什么 编辑:Mac部分的静态库(.a)而不是动态库(.dylib)的加分,如果这在Mono中是可能的话。 #define MAC/WINDOWS 及 在代码

我使用Mono在一组本机公开的命令上编写包装器

该集合是相同的(命令和签名),但是它是通过Windows中的DLL和Mac中的动态库公开的

我想知道是否有一种方法可以让我只创建一个包装器.NET/Mono DLL,同时让它自己找到正确的库来导入

如果是,语法是什么?如果不是,将DllImport与我要编译的2个不同操作系统分开的编译器定义是什么

编辑:Mac部分的静态库(.a)而不是动态库(.dylib)的加分,如果这在Mono中是可能的话。

#define MAC/WINDOWS

在代码内部。
编译时使用-define WINDOWS或-define MAC,以便调用DLL。因此,至少您将有一个代码库,或者您需要检查环境,但这很容易变得棘手。

您可能希望提供一个dll映射配置文件,告诉Mono在每个平台上加载哪个库:


如果可以为两个库指定相同的名称,则根本不需要更改代码。至少对我来说,在Windows/Linux环境下,本机库是用C编写的。

更简单,但jpobst的答案可能更合适+1尽管如此。是的,这种方法可能适用于库,它是项目的内部部分,因此不共享。但是在mono应用程序中使用@executable_path时要小心-它返回mono二进制文件本身的路径,而不是.EXE可执行文件。
#if