linux如何编译出lib,如何在Linux或Macos中为Windows编译静态.lib库

对于类似Unix的操作系统(Linux,MacOS等),静态库意味着

一个

ar archive的目标文件. ar是GNU将军

目的档案.它并不关心您将哪种文件存入存档.它的

当它们碰巧是目标文件时,只是将它称为“静态库”的自定义.和

它也只是一个被称为* .a的ar存档的自定义.你可以打电话给它

* .lib,或任何东西.

对于Visual Studio,静态库表示PE格式对象文件的存档

通常由Microsoft工具LIB创建.

Microsoft LIB存档的格式实际上与Unix ar存档的格式相同.微软

很久以前就采用了它.

所以如果你使用你的发行版的PE交叉编译器在Linux上编译一些PE目标文件

然后将它们存档到带有ar的* .lib中,你已经拥有了一个非常适合Windows的静态库

使用Visual Studio编译器.

好吧,只要这些目标文件具有C二进制接口,就可以了.

如果它们中的任何一个具有C接口,则它们是无用的:Microsoft和GCC C编译器使用不同的名称修改协议,否则ABI不兼容.

演示

我们在linux中开始使用静态库的一些源代码:

你好ç

#include

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:\develop\so\xstatlib>dir

Volume in drive E is VBox_imk

Volume Serial Number is 0000-0804

Directory of E:\develop\so\xstatlib

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:\develop\so\xstatlib>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:\develop\so\xstatlib>hello

Hello world

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值