gpt4 book ai didi

linux - Golang,在Linux中加载Windows DLL

转载 作者:数据小太阳 更新时间:2023-10-29 03:31:45 25 4
gpt4 key购买 nike

我们的 vendor 提供了可在 Windows 上运行的 DLL。是否可以使用 Go 加载自定义 xxx.dll 文件并在 Linux 中使用其功能?

像这样:https://github.com/golang/go/wiki/WindowsDLLs

最佳答案

简短的回答是“不”:当您“加载”动态链接库时,它不仅实际加载(如从文件中读取),而且链接到您的地址空间运行程序——通过操作系统提供的特殊方式(在基于 Linux 的系统上,至少在 x86/amd64 平台上是一个外部进程;在 Windows 上,它是一个内核设施,AFAIK)。换句话说,加载动态链接库涉及在您背后发生的相当多的复杂性。

另一个复杂的问题是,DLL 是否是“独立的”,因为它只包含“纯”函数——这些函数只对输入数据执行计算以提供输出数据——或者它们调用操作系统执行诸如文件 I/O 之类的事件。Windows 和 Linux 操作系统为正在运行的进程提供执行此类事件的方法的方式截然不同。

我能想到的最后一个复杂问题是这个库对其他库的依赖。如果库的代码是用 C 或 C++ 编写的,它很可能取决于编译库的编译器使用的 C 库(在 Windows 上,通常是 MSVCRxx.DLL 东西)。 (一个简单的例子是在库代码中调用 malloc()printf() 或类似的东西。)

所有这一切意味着大多数在 Windows 上为 Windows 编写的 DLL 都依赖于 Windows 和与用于构建该库的编译器关联的 C 或 C++ 标准库。

更不用说 Windows DLL 为其模块使用 PE(可移植可执行文件)格式,而基于 GNU/Linux 的系统本身就为其共享目标文件使用 ELF 格式。

关于linux - Golang,在Linux中加载Windows DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46646826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com