如何在 Linux 上使用 DLL 编译 Windows 应用程序

Posted

技术标签:

【中文标题】如何在 Linux 上使用 DLL 编译 Windows 应用程序【英文标题】:How to compile a windows application using DLL's on Linux 【发布时间】:2015-09-12 01:46:52 【问题描述】:

我有适用于 Windows 的 USB 设备的 SDK。我可以毫无问题地编译我的代码。但是,SDK 使用的是 DLL,并且不支持 Linux 上的设备。

我可以在 Linux 上用 DLL 编译代码吗?我一直在寻找 Wine 这样做,但我什至不知道从哪里开始。

有可能吗?

编辑:

dmesg 的输出:

[430.699883] usb 3-2:使用 xhci_hcd 的新高速 USB 设备编号 4

[430.829091] usb 3-2:找到新的 USB 设备,idVendor=132b,idProduct=210b

[430.829100] usb 3-2:新的 USB 设备字符串:Mfr=1,Product=2,SerialNumber=3

[430.829106]usb 3-2:产品:照度分光光度计CL-500A

[430.829111] USB 3-2:制造商:柯尼卡美能达公司

[430.829115] USB 3-2:序列号:10001991

[430.830678] hid-generic 0003:132B:210B.0002: hiddev0,hidraw1: USB HID v1.11 设备 [KONICA MINOLTA, INC. Illuminance Spectrophotometer CL-500A] on usb-0000:00:14.0-2/输入0

[430.831732] hid-generic 0003:132B:210B.0003: hiddev0,hidraw2: USB HID v1.11 设备 [KONICA MINOLTA, INC. Illuminance Spectrophotometer CL-500A] on usb-0000:00:14.0-2/输入1

[1153.052833] systemd-hostnamed[3663]:警告:nss-myhostname 未安装。更改本地主机名可能会使其无法解析。请安装 nss-myhostname!

【问题讨论】:

什么样的USB设备? “HID”是个好兆头。这意味着它是一个"Human" Input Device,你不需要弄乱原始 USB。 【参考方案1】:

一般来说,不会。设备驱动程序是特定于操作系统的,因为它们具有操作系统调用驱动程序的钩子,因此您不能在 wine 下使用 windows 驱动程序,因为 linux 不是 windows 并且在内部不像 windows 那样工作。

现在,有一些例外,即 TWAIN 扫描仪和 CAPI 电话设备,它们并没有真正附带 OS 模式驱动程序,而是对应于用户态 API,因此有用于这些的 Wine 包装器。

【讨论】:

好吧,那太糟糕了......我想我必须研究如何制作自己的驱动程序。感谢您的快速回答。 这有多难取决于你拥有什么样的 USB 设备。这是什么? 这是一台柯尼卡美能达 CL500a。 哦!光度学!这会很有趣!在 windows 下嗅探 USB 总线。它可能(如果我构建了它)只是一个批量传输协议,可以相对容易地在 linux(和 windows)下使用 libUSB 重新创建,而无需编写内核驱动程序。 哦,顺便说一下,这是相当专业的测量设备,所以该接口很可能与该特定领域的某些标准软件兼容。连接设备,看看dmesg 说了什么。也许它只是一个 USB 转串口适配器,或类似的东西,让事情变得更容易。祝你好运!【参考方案2】:

DLL 是适用于 Windows 的库,您不能在 Linux 上使用这些库进行编译。 Wine 是一个帮助在 Linux 上安装可执行文件的软件,但它也有局限性。由于windows提供的这些标准库不存在,并非所有软件都可以安装。

【讨论】:

那是错误的。 Wine 与帮助安装无关。它是一个 Windows API 环境,因此您实际上可以在 Linux 下使用为 Windows 编译的通用程序,但不能使用驱动程序。

以上是关于如何在 Linux 上使用 DLL 编译 Windows 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在windows上编译Tesseract OCR

使用 Linux C 代码和头文件编译 Windows DLL

在 Linux/OSX 上从 C 程序运行 matlab 编译的 dll 库

如何在windows上编译Tesseract OCR

在 Linux 中使用 .lib 和 .dll 文件

C++ MinGW 如何从 Windows 编译 Linx