Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.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
如何在Mac OS X中将Windows DLL与Java一起使用?_Java_C_Macos_Dll_Java Native Interface - Fatal编程技术网

如何在Mac OS X中将Windows DLL与Java一起使用?

如何在Mac OS X中将Windows DLL与Java一起使用?,java,c,macos,dll,java-native-interface,Java,C,Macos,Dll,Java Native Interface,我见过一些Java项目通过Windows中的JNI使用taucs.dll,这是一个稀疏线性解算器的C库。我想我可以在MacOSX中通过将TAUCS编译成类似于libTaucs.jnilib的东西来实现同样的效果。我可以访问库的代码,但不知道如何将其编译成DLL,更不用说JNI库了。到目前为止,我只能编译到一个静态库 有没有办法将DLL转换为Mac的JNI库?如果我必须编译代码,如何编译?在动态库中包装静态库是否适用于JNI,特别是对于TAUC,如果有人有经验的话?许多操作系统都有共享库的概念,但

我见过一些Java项目通过Windows中的JNI使用
taucs.dll
,这是一个稀疏线性解算器的C库。我想我可以在MacOSX中通过将TAUCS编译成类似于
libTaucs.jnilib
的东西来实现同样的效果。我可以访问库的代码,但不知道如何将其编译成DLL,更不用说JNI库了。到目前为止,我只能编译到一个静态库


有没有办法将DLL转换为Mac的JNI库?如果我必须编译代码,如何编译?在动态库中包装静态库是否适用于JNI,特别是对于TAUC,如果有人有经验的话?

许多操作系统都有共享库的概念,但当然,在不同的操作系统上,这些库的格式等是不同的

DLL(动态链接库)是Windows版本的共享库。您不能仅在Mac OS上使用Windows计算机上的DLL,就像您不能在Mac OS(或任何其他操作系统)上运行Windows应用程序一样

您不需要尝试在Mac OS上使用Windows DLL,而需要查找您尝试使用的本机库的Mac OS特定版本。或者,如果您有源代码,请将其编译到Mac OS本机共享库中。Mac OS X上的共享库具有扩展名.so(而不是.dll),它代表“共享对象”。

仅使用Java加载它们是不可能的。

最后,Microsoft发布了完全独立于平台的版本。使用.NET Core framework构建DLL时,可以使用以下命令运行该文件

dotnet yourapp.dll

此外,现在可以在Mac或Linux机器上使用轻量级IDE开发.NET应用程序,IDE已在集成的地方发布。

谢谢您的回答。事实上,我知道这一点,但这样形成了这个问题,因为我暗暗希望有一个神奇的步骤可以做到这一点。顺便说一句,为了准确起见,葡萄酒将与加快我的繁重功能的想法背道而驰。说Java不可能做到这一点是不准确的。当然这是可能的,只是不容易,而且有现成的设施。原则上,我们所需要做的就是编写可以读取.dll文件和解析入口点的代码,然后使用JNA通过这些入口点调用它们。如果.dll调用WinAPI(许多/大多数都会调用),则会增加复杂性,而这正是Wine解决方案的用武之地。这是有可能的,但不容易,也不费力。而且为了准确起见,使用葡萄酒并不一定慢。设置和启动WINE需要时间,但取决于调用.dll函数的方式,执行它们可能很快。