linux - 如何将从linux生成的静态库.a链接到windows c项目
问题描述
我有一个mylib.a
在 Linux 下生成的静态库。现在如何将它链接到 windows 环境下的项目?提供mylib.a
函数供其他人调用。我在 Linux 中构建这个库的原因是因为一切都已经在 Linux 中设置好了。
解决方案
我有一个在 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(在源代码级别)。例如,Qt、POCO、GTK、SDL等等。如果您使用 C 或 C++ 为这些框架之一编写代码(仅此而已!),将源代码从 Windows 移植到 Linux 或反之亦然应该非常容易。但是,仍然存在一些差异:文件路径、字体名称、命令语言(和许多其他资源)等......在 Linux 和 Windows 上仍然不同。
推荐阅读
- javascript - Vue.js:如何防止浏览器转到 href 链接而只执行 @click 方法?
- java - ViewPager 在 Fragment 中有 Fragments
- angular - Angular 6 - 多个路由器插座
- firebase - 无法从 Firebase 收到通知
- windows - 在 cmd 中将 powershell 脚本作为自定义命令运行
- puppeteer - puppeteer - 释放对 chrome 的控制
- java - 如何在 Android Studio 中忽略 java.time 包
- mysql - 在所有子项都引用其所有父项的树中移动对象
- javascript - 为什么 const 声明了两次?
- javascript - Firebase 不存储日期