【发布时间】:2009-08-11 20:20:56
【问题描述】:
一些构建脚本(例如 numpy 中的那个)只需执行以下操作即可使 gcc 编译的库存档与 Visual Studio 链接器一起工作:
copy libfoo.a foo.lib
令人惊讶的是,它似乎有效。有谁知道为什么?
【问题讨论】:
标签: windows visual-studio gcc compiler-construction linker
一些构建脚本(例如 numpy 中的那个)只需执行以下操作即可使 gcc 编译的库存档与 Visual Studio 链接器一起工作:
copy libfoo.a foo.lib
令人惊讶的是,它似乎有效。有谁知道为什么?
【问题讨论】:
标签: windows visual-studio gcc compiler-construction linker
取决于几个因素,它可能有效,也可能无效 - 并且有几个原因。我认为你的意思是全面的、可逆的兼容性。
另一种解释是 MSVC 链接器由于历史原因与 .a 格式兼容。 IIRC,它从 UNIX 时代就已经存在。同样,虽然我只能看到这适用于纯 C,而不是 C++。
编辑:实际上是相反的。 Windows 版本的 GCC 工具包创建与 Microsoft 的 COFF 格式兼容的静态库。
【讨论】:
虽然我不知道 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 也是具有相同或兼容内容索引的目标文件的存档。
【讨论】: