我有一个关于编写程序在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可以运行一些本地windows代码(不需要重新编译任何东西,包括原始代码)。 但是葡萄酒也有局限性。 它不是一个完整的Windows API,库代码需要运行的任何东西都必须在Wine上可用,否则它也不起作用。 对于许多简单的应用程序来说,这不是一个主要的问题,但是许多较新的Windows API,旧的那些看不到太多用途的黑暗角落,尤其是硬件特定的东西,可能无法使用。
如果您打算在多个平台上运行,则首先要验证您打算使用的库是否跨平台,或者您希望使用的所有操作系统是否有合理的等价物。
不,Cygwin为* ix程序提供(部分) 源可移植性。 当然,还有更高级别的工具包可以提供源码的可移植性,比如QT和GTK。 无论哪种方式,你仍然需要重新编译程序和库。 对于二进制可移植性,你需要与wine相反的一个程序,它理解ELF并将Linux系统和库调用映射到Windows。 据我所知,这并不存在。
不需要。您必须为Windows或Linux分别构建它。
有几个建议给你的情况: