简体   繁体   中英

creating a project on mingw under windows

I am creating a project using mingw under windows. When run on another PC (without wingw in PATH, respectively), get errors, missing: libwinpthread-1.dll, libgcc_s_seh-1.dll, libstdc++-6.dll. How can I build the project so that everything starts up normally?

A C++ program needs runtime libraries to run. They're usually not part of the program itself! So you'd need to ship these libraries alongside with your program (which is what most software does).

You can, for many things, however, also use "static linking", which means that the parts of the libraries used by your program are included in your program itself! The -static flag supplied to executable-generating step in your project will do that. If your program consists of but a single file, that would be g++ -o test -static test.c (your g++ might be called x86_64-w64-mingw32-g++ or so).

If your distributed .exe file won't run because of missing .dll files that's because it is linked against those files and you need to distribute these files with your .exe file.

But actually there are 2 solutions to this problem:

  • Shared build (= using .dll files): distribute the .dll files with your application. The best place to put the .dll files is in the same folder as the .exe file(s). You can use 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 to copy your .exe file(s) along with any .dll files required.
  • Static build (= everything rolled into the .exe file(s)): when building your .exe file(s) use the --static linker flag (and if needed also -static-libgcc and/or -static-libstdc++ ). This create a static .exe file, which means all the static libraries are rolled into the .exe file. This may make your .exe quite large (though you can try reducing its size with the strip command or the -s linker flag) and doesn't have the advantage of .dll files where common code is only distributed once. It may also cause longer loading times for your application, since everything is loaded at once.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM