在 windows 下在 mingw 上创建项目
creating a project on mingw under windows
我正在 windows 下使用 mingw 创建一个项目。在另一台PC上运行时(分别在PATH中没有wingw),报错,缺少:libwinpthread-1.dll、libgcc_s_seh-1.dll、libstdc++-6.dll。如何构建项目才能正常启动?
C++ 程序需要 运行时间库 到 运行。它们通常不是程序本身的一部分!因此,您需要将这些库与您的程序一起发布(这是大多数软件所做的)。
然而,对于很多事情,您也可以使用“静态链接”,这意味着您的程序使用的库部分包含在您的程序本身中!提供给项目中 executable-generating 步骤的 -static
标志将执行此操作。如果你的程序只包含一个文件,那就是 g++ -o test -static test.c
(你的 g++
可能被称为 x86_64-w64-mingw32-g++
左右)。
如果您分发的 .exe
文件不会 运行 因为缺少 .dll
文件,那是因为它链接到这些文件,您需要将这些文件与您的 .exe
文件。
但实际上这个问题有两种解决方案:
- 共享构建(= 使用
.dll
文件):将 .dll
文件与您的应用程序一起分发。放置 .dll
文件的最佳位置是与 .exe
文件位于同一文件夹中。您可以使用 Dependency Walker to figure out which .dll
files your .exe
file needs (and which .dll
files those .dll
files need etc.) or you can use the command line tool copypedeps -r
from the pedeps project 复制您的 .exe
文件以及所需的任何 .dll
文件。
- Static build(=所有内容都包含在
.exe
文件中):在构建 .exe
文件时使用 --static
链接器标志(如果需要,还有 -static-libgcc
and/or -static-libstdc++
)。这将创建一个静态 .exe
文件,这意味着所有静态库都将汇总到 .exe
文件中。这可能会使您的 .exe
非常大(尽管您可以尝试使用 strip
命令或 -s
链接器标志来减小它的大小)并且没有 .dll
的优势公共代码只分发一次的文件。这也可能导致您的应用程序加载时间更长,因为所有内容都是一次加载的。
我正在 windows 下使用 mingw 创建一个项目。在另一台PC上运行时(分别在PATH中没有wingw),报错,缺少:libwinpthread-1.dll、libgcc_s_seh-1.dll、libstdc++-6.dll。如何构建项目才能正常启动?
C++ 程序需要 运行时间库 到 运行。它们通常不是程序本身的一部分!因此,您需要将这些库与您的程序一起发布(这是大多数软件所做的)。
然而,对于很多事情,您也可以使用“静态链接”,这意味着您的程序使用的库部分包含在您的程序本身中!提供给项目中 executable-generating 步骤的 -static
标志将执行此操作。如果你的程序只包含一个文件,那就是 g++ -o test -static test.c
(你的 g++
可能被称为 x86_64-w64-mingw32-g++
左右)。
如果您分发的 .exe
文件不会 运行 因为缺少 .dll
文件,那是因为它链接到这些文件,您需要将这些文件与您的 .exe
文件。
但实际上这个问题有两种解决方案:
- 共享构建(= 使用
.dll
文件):将.dll
文件与您的应用程序一起分发。放置.dll
文件的最佳位置是与.exe
文件位于同一文件夹中。您可以使用 Dependency Walker to figure out which.dll
files your.exe
file needs (and which.dll
files those.dll
files need etc.) or you can use the command line toolcopypedeps -r
from the pedeps project 复制您的.exe
文件以及所需的任何.dll
文件。 - Static build(=所有内容都包含在
.exe
文件中):在构建.exe
文件时使用--static
链接器标志(如果需要,还有-static-libgcc
and/or-static-libstdc++
)。这将创建一个静态.exe
文件,这意味着所有静态库都将汇总到.exe
文件中。这可能会使您的.exe
非常大(尽管您可以尝试使用strip
命令或-s
链接器标志来减小它的大小)并且没有.dll
的优势公共代码只分发一次的文件。这也可能导致您的应用程序加载时间更长,因为所有内容都是一次加载的。