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

时间:2017-07-21 22:34:49

标签: c++ mingw mingw-w64

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

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

我希望有人可以帮助我。必须有所不同,因为我会得到不同的结果。

1 个答案:

答案 0 :(得分:1)

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

唯一的区别是libwinpthread.a更加压缩。 我尝试使用make-command编译winpthread-code。 然后我用“make install”命令安装它。 但是,如果我用“make install-strip”安装它,它将安装一个没有符号表的a文件。 与已安装的a-files完全相同。

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

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

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

现在你将有几个o文件。 您可以通过编写:nm -C file.o

来查看o文件中的内容

如果你想组装一个o文件,你可以写:objdump -D file.o

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

使用libpthread中的一个o文件和libwinpthread中的一个o文件来执行此操作。 然后将txt文件与您喜欢的软件进行比较。 它们将完全相同。