c++ - 在 linux 中使用为 windows 编写的软件库(使用 dll)

标签 c++ linux dll

这可能与 this question 重复但答案并没有解决我的问题......


我想为项目使用由 C++ header 、库 (.lib) 和 dll 提供的第三方软件。因为它将在 BeagleBone 上运行,所以我正在为 Linux 编写这个项目。是否有任何正确的方法来链接 Linux 应用程序的 dll?

最佳答案

极不可能工作:

  1. Windows 对可执行文件使用不同的文件格式(DLL 本质上是可执行文件——Linux 中的共享库也是如此)。这意味着重定位信息和符号链接(symbolic link)是不同的。

  2. 即使您设法加载和重新定位 DLL,您也很可能需要许多其他 DLL(例如编译器运行时和系统运行时 [例如 kernel32.dll])才能实际运行该应用程序。当然,这些依赖文件需要有一个正确的接口(interface)才能在 Linux 上工作(参见 #3)

  3. 没有什么可以阻止 Windows DLL 直接在共享库中进行系统调用 - 这些在 Linux 中不起作用。

您最好的选择是:

  1. 向这些库的供应商索取 Linux 版本。根据功能的不同,供应商为不同的架构生产替代品可能是也可能不是一件容易的事。
  2. 在 WINE(WINdows 模拟器)包内运行应用程序。
  3. 运行 Windows 虚拟机,并在其中运行应用程序。
  4. 编写您自己的替换库,或寻找其他可用的库。

关于c++ - 在 linux 中使用为 windows 编写的软件库(使用 dll),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40613722/

相关文章:

java - 如何从磁盘复制特定文件

python - CreateRemoteThread() 未按预期运行

c++函数将额外的空条目保存到文件中

c++ - dynamic_cast 模板类 "invalid target type for dynamic_cast"

php - 自定义 cron 作业未安排 Magento2

python - 在 anaconda 创建的虚拟环境中安装包的问题

java - 从 Java 确定是 x86 还是 x64 系统

dll - 如果 DLL 有 dontcopy 标志,可以在卸载程序中调用 DLL 函数吗?

c++ - 比较C中的两个int数组

c++ - Typedef 代码重复。模板类型中的模板类型