Windows 和 Linux 之间的 C++ 可移植性

标签 c++ windows linux portability libraries

我有一个关于编写在 windows 和 linux 之间可移植的程序的问题。

最近我意识到,如果您编写的程序使用任何类型的外部库,如果该库没有 linux 版本(或在 linux 中开发时没有 windows 版本),那么您就完蛋了。

这是我的问题:如果我在 linux 中编写一个链接到 lol.a 的程序,然后我想在 Windows 上编译并运行它而不将 lol.a 重新编译成 lol.lib,那么像 MinGW 或 Cygwin 这样的东西可以吗这个?链接到 Windows 平台上的 .a 文件以生成 Windows 可以运行的 .exe 文件?

最佳答案

您将不得不为不同的操作系统重新编译所有库。库的二进制格式因操作系统而异。更重要的是,即使您不使用库,您也需要重新编译,原因很简单,因为不同的操作系统具有不同的系统调用约定。解决这个问题的唯一方法是使用虚拟器。

特别是,CygWin 不能运行 linux 程序。根本。 CygWin 仅在您的程序和 Windows 内核之间提供一个 posix 兼容层。

Linux 上的情况没有那么惨淡。 Wine 可以运行一些 native Windows 代码(不需要重新编译任何东西,包括您的原始代码)。但是 Wine 也有局限性。它不是一个完整的 Windows API,库代码运行所需的任何东西都必须在 Wine 上可用,否则它也不会工作。对于许多简单的应用程序来说,这不是主要问题,但是许多较新的 Windows API、旧应用程序的一些用处不大的暗角,特别是任何特定于硬件的应用程序,可能都无法使用.

如果您打算在多个平台上运行,请务必首先确认您打算使用的库也是跨平台的,或者您希望使用的所有操作系统都有合理的等效项。

关于Windows 和 Linux 之间的 C++ 可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3261608/

相关文章:

c++ - C++ 有哪些比较晦涩的部分?

c++ - 类中字符串成员变量的语法错误

c# - C#中的ACL检查/管理

windows - 推荐开源或免费软件工具来检查两台服务器之间的网络流量

java - 是否有易于破解的开源 Tivo 媒体服务器?

c++ - 计算表达式

c++ - OpenCV C++ 使用高斯核函数计算晕影效果

windows - 批处理文件以读取具有特殊字符的 txt 并替换其中的单词

linux - 如何在 Ubuntu 中为 Qt 5.11.2 添加 mysql 驱动程序

linux - Linux 中设备如何链接到驱动程序