首页 > 解决方案 > 如何将从linux生成的静态库.a链接到windows c项目

问题描述

我有一个mylib.a在 Linux 下生成的静态库。现在如何将它链接到 windows 环境下的项目?提供mylib.a函数供其他人调用。我在 Linux 中构建这个库的原因是因为一切都已经在 Linux 中设置好了。

标签: linuxwindowsstatic-libraries

解决方案


我有一个在 Linux 下生成的静态库 mylib.a。现在如何将它链接到 windows 环境下的项目?

您根本无法做到这一点(除非在 Windows 上您将使用一些 Linux 兼容层,如WSL)。因为 Windows 和 Linux 非常不同且不兼容:不同的系统调用(对于 Linux,在syscalls(2)中列出;在 Windows 上,系统调用集没有很好的文档记录),不同的ABI(对于 Linux,请参阅this),不同的调用约定,不同的可执行格式(Linux,ELF;Windows,PE),不同的库格式和不同的动态加载概念(所以插件的概念在 Windows 和 Linux 上不同且不兼容)。

顺便说一句,仅靠静态库是不够的(即使仅在 Linux 上也是如此),因此其本身毫无用处。您需要额外的文件和文档才能在项目中使用它。

您可以阅读操作系统:三个简单的部分,以更好地了解操作系统是什么以及提供什么。需要一整本书。然后,您可以深入了解您系统的特定操作系统 API(例如,对于 Linux,阅读ALP或与POSIX相关的新内容- 以及man页面;对于 Windows,详细研究WinAPI)。

我的建议是始终处理源代码(高于您的操作系统提供的内容)。因此,如果您可以获得源代码,则可以将其mylib.a移植Windows(如果该库是 Linux 或 POSIX 特定的,这可能需要数年的工作)。

请注意,存在多个框架以在 Linux、Windows 和 MacOSX 上提供几乎通用的API(在源代码级别)。例如,QtPOCOGTKSDL等等如果您使用 C 或 C++ 为这些框架之一编写代码(仅此而已!),将源代码从 Windows 移植到 Linux 或反之亦然应该非常容易。但是,仍然存在一些差异:文件路径、字体名称、命令语言(和许多其他资源)等......在 Linux 和 Windows 上仍然不同。


推荐阅读