一些构建脚本(例如numpy中的脚本)只是执行以下操作以使gcc编译的库存档与Visual Studio链接器一起使用:
copy libfoo.a foo.lib
令人惊讶的是它似乎有效。有谁知道为什么?
答案 0 :(得分:3)
根据几个因素,它可能会也可能不会起作用 - 并且有几个原因。我认为你的意思是全面的,可逆的兼容性。
另一种替代解释是,由于历史原因,MSVC链接器与.a格式兼容。 IIRC,自UNIX时代以来一直存在。同样,虽然我只能看到这适用于纯C,而不是C ++。
编辑:实际上是另一种方式。 Windows版本的GCC工具包创建了与Microsoft的COFF格式兼容的静态库。
答案 1 :(得分:1)
虽然我不知道lib格式的任何细节,但我可以提供一些关于lib * .a格式的信息。这只是* .o目标文件的存档,可以使用ar程序(binutils的一部分)进行操作。
prompt>ar t /usr/lib64/libc.a | head
init-first.o
libc-start.o
sysdep.o
version.o
check_fds.o
libc-tls.o
elf-init.o
dso_handle.o
errno.o
errno-loc.o
prompt>ar t /usr/lib64/libc.a | wc
1447 1447 16904
prompt>
我假设* .lib也是具有相同或兼容内容索引的目标文件的存档。