如何在Linux或Macos中为Windows编译静态.lib库
发布时间:2020-12-14 01:06:01 所属栏目:Linux 来源:网络整理
导读:我正在寻找在 Linux或Macos中为Windows编译静态库的方法,似乎有交叉编译器为Windows生成.a库,如 this one,但这不是我想要的,我想要的是.lib静态库文件for Windows,最好是Visual Studio.我知道我可以运行Windows虚拟机并使用Visual Studio,但这太重了,无法在
我正在寻找在
Linux或Macos中为Windows编译静态库的方法,似乎有交叉编译器为Windows生成.a库,如
this one,但这不是我想要的,我想要的是.lib静态库文件for Windows,最好是Visual Studio.我知道我可以运行Windows虚拟机并使用Visual Studio,但这太重了,无法在命令行中完成.
解决方法
对于类似Unix的操作系统(Linux,MacOS等),静态库意味着
一个 ar archive的目标文件. ar是GNU将军
目的档案.它并不关心您将哪种文件存入存档.它的 当它们碰巧是目标文件时,只是将它称为“静态库”的自定义.和 它也只是一个被称为* .a的ar存档的自定义.你可以打电话给它 * .lib,或任何东西. 对于Visual Studio,静态库表示PE格式对象文件的存档 Microsoft LIB存档的格式实际上与Unix ar存档的格式相同.微软 所以如果你使用你的发行版的PE交叉编译器在Linux上编译一些PE目标文件 好吧,只要这些目标文件具有C二进制接口,就可以了. 演示 我们在linux中开始使用静态库的一些源代码: 你好? #include <stdio.h> void hello(void) { puts("Hello world"); } 交叉编译: $x86_64-w64-mingw32-gcc-win32 -o hello.obj -c hello.c 制作静态库: $ar rcs hello.lib hello.obj 然后一个程序将与hello.lib链接: main.c中 extern void hello(void); int main(void) { hello(); return 0; } 现在我们跳进一个Windows 10 VM,我们正在查看我们的文件 E:developsoxstatlib>dir Volume in drive E is VBOX_imk Volume Serial Number is 0000-0804 Directory of E:developsoxstatlib 03/12/2017 18:37 72 main.c 03/12/2017 18:29 978 hello.lib 03/12/2017 18:26 66 hello.c 03/12/2017 18:27 832 hello.obj 4 File(s) 1,948 bytes 0 Dir(s) 153,282,871,296 bytes free 编译并链接我们的程序: E:developsoxstatlib>cl /Fehello.exe main.c hello.lib Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25547 for x64 Copyright (C) Microsoft Corporation. All rights reserved. main.c Microsoft (R) Incremental Linker Version 14.11.25547.0 Copyright (C) Microsoft Corporation. All rights reserved. /out:hello.exe main.obj hello.lib 运行: E:developsoxstatlib>hello Hello world (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |