贡献者: addis
Windows.h
调用 Windows API,在 Linux 上无法运行。
MinGW
加 MSYS
相当于一个轻量级的 Cygwin
,后者编译的软件需要链接到 cygwin1.dll
,它可以把对 Unix API 的调用转换成对 Windows API 的调用(但应该不在二进制层面)。
cat, echo
等命令。MSYS 提供 bash shell 和 cat, echo
等命令但本身不提供编译器。所以二者通常一起使用。建议直接安装 MSYS,然后用 pacman 安装 MinGW 的 gcc 编译器等。
mingw64.exe
即可打开 mingw 命令行。mingw64.exe
所在的目录就是命令行的根目录。
g++
的版本。
g++
编译程序以后,会出现 a.exe
而不是 a.out
。这个执行文件是可以双击执行的,但是运行完会马上退出。可以在程序最后用 getchar()
。也可以打开一个 cmd 命令行然后运行 a.exe
。当然在 mingw64
的命令行也可以执行。另外执行时 .exe
拓展名可以省略。
apt
或类似的包管理软件,一切库都要自己手动编译。或者用 MinGW instellation 安装 32-bit 版本。MSYS 上可以用 pacman
。
MinGW instellation manager
是一个 GUI 界面,可以下载安装编译好的 mingw 程序。例如安装 mingw32-make
,安装以后就和 make
的用法一样。注意该 manager 并不是一个通用的包管理软件,里面的包基本还是围绕 GCC 的。
c
盘的目录为 /c
g++
中定义的宏有 __GNUC__
,__MINGW32__
,__MINGW64__
ldd
查看动态程序的库依赖(dll
和 so
拓展名都会搜索到,但建议用 dll
,让其他 windows 程序也可以使用)。
g++ -shared -o lib0.dll lib0.o
g++ -shared -o lib1.dll lib1.o -L . -l 0
g++ -c main.cpp
g++ -o main.x main.o -l1 -L./ -Wl,-rpath,./
LD_LIBRARY_PATH
变量是没用的,直接添加到 PATH
就可以在其中的路径下自动搜索 dll
pacman
进行包管理,和 Arch linux 一样。
apt
命令中的不一样。
C:\msys64\
,和 mingw 一样可以用 /c
访问 C 盘。
pacman -S mingw-w64-x86_64-gcc
(UCRT 版的是 mingw-w64-ucrt-x86_64-gcc
,MSYS 版的是 gcc
)。
/mingw64/bin
,要把它默认添加到 PATH,用 echo 'export PATH=$PATH:/mingw64/bin' >> ~/.bashrc; source ~/.bashrc
g++ --version
查看版本,愉快编译程序了。
g++
编译时,宏 __MSYS__
有定义,而 __MINGW32__
和 __MINGW64__
没定义。
pacman -S base-devel
包含 binutils bison diffstat diffutils dos2unix flex m4 make patch pkgconf texinfo texinfo-tex base-devel
a.exe
。直接在 MSYS2 中运行没问题,但是如果在 Windows 中双击就会找不到 dll。
ldd a.exe
看看需要什么动态库。其中 /c/WINDOWS/SYSTEM32
类似的目录不需要管,因为它们已经在 PATH 中且是 Windows 系统提供的。
/ucrt64/bin/
中(也就是 C:\msys64\ucrt64\bin\
中)。UCRT 是 Windows 的 Unified C Runtime。
/mingw64/bin/
中的 libgcc_s_seh-1.dll libstdc++-6.dll libwinpthread-1.dll
.dll
文件的目录中有同名的 .dll.a
文件,那么编译器会链接后者的符号
main()
函数退出前用一个 getchar();
即可实现任意键退出。
可执行文件名.exe.manifest
,和 exe 文件放在一起即可(详见)。
system()
,那么当它在 MSYS2 命令行中运行时可以调用 Unix 命令例如 mkdir
,但双击运行时调用的应该是 cmd
。
Ctrl+Ins
复制,Shift+Ins
粘贴。
Ctrl+=
放大 Ctrl+-
缩小。滚轮也可以。
Alt+F3
搜索