我正在使用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-code。
然后用“make install”命令安装它。
但是,如果我改为使用“make install-strip”安装它,则会安装一个没有符号表的a文件。
结果与已安装的a文件完全相同。

因此,如果要使用不带符号表的winpthread(静态链接),请使用标签-lwinpthread。
如果您确实想要winpthread的符号表,请使用标记-lpthread。

静态库(a文件)只是一种存档格式(如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%相同。

10-06 11:19