与libwinpthread静态链接

niX*_*man 8 mingw static-linking mingw-w64

我尝试使用静态链接工具链库构建程序.我通过:

LDFLAGS="-Wl,-Bstatic -lwinpthread -Wl,-Bdynamic -static-libgcc -static-libstdc++"
Run Code Online (Sandbox Code Playgroud)

但程序与共享相关联libwinpthread-1.dll.

我做错了什么?

我得到静态链接libwinpthreads的唯一方法是传递-staticLDFLAGS.但它打破了插件系统的构建程序.

我使用MinGW-builds项目中的mingw-w64 + GCC-4.7.2:http://sourceforge.net/projects/mingwbuilds/

Sta*_*ant 6

试试这个:

-static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic
Run Code Online (Sandbox Code Playgroud)

注意-lstdc++之前-lpthread.它对我有用.

确保将其添加到g++命令行的最后.


Gam*_*per 0

你没有做任何不正确的事情,Mingw-Builds 就是按照你的方式工作的。

我最近偶然发现了这一点,但还有另一个原因:

Mingw-Builds 自动将可执行文件链接到 GCC 动态库(libwinpthread-1.dll、libstdc++-6.dll、libgcc_s_dw2-1.dll)以节省可执行文件大小(问题:当您发布可执行文件时,您必须记住同时添加缺少的 dll)与您的二进制文件一起使用,因为不能保证用户的系统上有这些 DLL)

就我而言,问题是我在同一系统上有多个 GCC pakcages,因此我没有将它们添加到 PATH 以避免名称冲突。

有趣的是,CMAKE 在配置项目之前会生成一个 C-SourceFile,该文件经过编译并用于获取有关编译器的信息,因为 DLL 不在 PATH 中,所以由 CMake 生成的小可执行文件由于缺少 DLL 而崩溃,并且停止了整个构建过程。

解决此问题的解决方案是将编译器路径临时添加到 PATH(或者更好地在另一个环境中运行 CMake)。

手动将 DLL 添加到 Cmake 临时目录不起作用,因为 Cmake 在每次配置时都会清理该目录。

如果您使用 mingwbuilds,则必须链接到 pthreadBLAH.dll 无解决方法