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的唯一方法是传递-static给LDFLAGS.但它打破了插件系统的构建程序.
我使用MinGW-builds项目中的mingw-w64 + GCC-4.7.2:http://sourceforge.net/projects/mingwbuilds/
试试这个:
-static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic
Run Code Online (Sandbox Code Playgroud)
注意-lstdc++之前-lpthread.它对我有用.
确保将其添加到g++命令行的最后.
你没有做任何不正确的事情,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 无解决方法
| 归档时间: |
|
| 查看次数: |
8119 次 |
| 最近记录: |