libwinpthread.a 和 libpthread.a 之间的区别?



我使用的是Windows的Mingw64(当然(,我通常静态链接到libwinpthread.a。但我注意到还有一个名为libpthread.a的库(没有获胜(。我可以看到它们有不同的大小,所以一定有些不同。如果我创建一个包含线程库的非常简单的程序,当我使用标签 -libpthread 而不是 -libwinpthread 时,我可以看到编译的代码也有不同的大小。

我知道 winpthread 使用的是 BSD 许可证。在Linux中,pthread使用的是LGPL许可证。那么它可以是关于许可证的事情吗?也许libpthread正在使用LGPL,libwinpthread正在使用BSD?我不知道。

我希望这里有人可以帮助我。一定有些东西不同,因为我得到的结果不同。

这很尴尬,但我终于找到了libpthread.a和libwinpthread.a之间的区别。 它们是 99.9%(你可以说 100%(相同。

唯一的区别是libwinpthread.a被压缩得更多。 我试图用make-command编译winpthread代码。 然后我使用"进行安装"命令安装它。 但是,如果我改为使用"make install-strip"安装它,它将安装一个没有符号表的 a 文件。 结果与已安装的 a 文件完全相同。

所以使用标签 -lwinpthread 如果你想使用没有符号表的 winpthread(静态链接(。 如果您确实想要 winpthread 的符号表,请使用标记 -lpthread。

静态库(a-file(只是一种存档格式(如tar(,里面有o文件。 要查看A文件,您需要Windows的mingw-w64,cygwin或msys2或类似文件。 因此,通过在终端中写入来查看 a 文件:ar -t -file.a

如果要提取 a 文件,可以写入:ar -x file.a

现在您将拥有多个 o 文件。 您可以通过编写以下内容来查看 o 文件中的内容:nm -C file.o

如果你想对o文件进行反汇编,你可以写:objdump -D file.o

或者将数据写入文件:objdump -D file.o> obj_arm.txt

使用来自libpthread的一个o文件和来自libwinpthread的一个o文件来做到这一点。 然后将 txt 文件与您喜欢的软件进行比较。 它们将是 100% 相同的。

最新更新