c++ - libwinpthread.a 和 libpthread.a 的区别?

标签 c++ mingw mingw-w64

我正在使用 Mingw64 for Windows(当然),我通常静态链接到 libwinpthread.a。但我注意到还有一个名为 libpthread.a 的库(没有 win)。我可以看到它们有不同的尺寸,所以一定有什么不同。如果我创建一个包含线程库的非常简单的程序,当我使用标记 -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 文件)只是一种内部包含 o 文件的存档格式(如 tar)。 要查看 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% 相同。

关于c++ - libwinpthread.a 和 libpthread.a 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45247659/

相关文章:

c++ - 如何将 "ENTER"case 实现到 switch 语句中

c - MingW 编译简单 C 程序时出现意外语法错误

c++ - 库中的 MinGW-w64 编译错误

c++ - 不匹配的类型 'std::chrono::_V2::steady_clock' 和 'std::chrono::_V2::system_clock'

c++ - 在灰度 (B/W) 图像上绘制彩色点

c++ - 什么导致双向链表代码中的段错误

GCC的异常处理模型

audio - SDL音频流回调函数从未触发

在 Windows 上使用 mingw32-make 时出现 opencv 安装错误

c++ - 为 qstring 导出结果设置编码