众所周知,我们使用Mingw或者TDM-GCC里面的命令行(gcc或者g++)编译出来的文件默认是没有图标的。那么应当如何给它加上图标呢?
![](https://i-blog.csdnimg.cn/blog_migrate/40168c8fe33c93fff8f29042a5bbe116.png)
1, 先准备好一个ico图标文件,然后在ico文件同目录下建立一个文本文档,里面写入:
1 ICON "图标文件名"
2,然后把这个文本文档扩展名改为rc。例如我这里的:
3,然后使用windres链接rc文件,链接输出文件扩展名为o:
windres -i "你的rc文件" -o "输出的链接图标文件.o"
例如我的:
4,最后使用g++一起编译你的源程序和链接后的图标资源文件:
g++ 源程序.cpp 链接后的图标文件.o -o 编译输出的文件.exe
例如我的:
这个时候输出的文件就有图标了!
除此之外,还有一点需要注意的是,我们知道gcc/g++可以通过-m32和-m64参数来编译出32位或者是64位应用程序。而我们上面使用windres链接出来的文件也是分32或者64位的。正常情况下我们上面直接链接的图标文件的架构是跟随我们系统的,如果你是64位Windows系统那么链接出来的xxx.o文件也就是64位的(gcc/g++不用-m参数时编译也是一样跟随系统架构)。
但是如果说我们在编译指定架构可执行文件时,那么链接图标时也需要来指定架构,否则最后联合编译时会出错。
例如我现在要编译一个32位程序:
先使用windres链接图标,命令行加上-F参数链接32位架构:
windres -i ico.rc -o ico32.o -F pe-i386
然后再一起编译(编译时加上-m32参数):
g++ -m32 main.cpp ico32.o -o Main32.exe
我这里编译过程如下:
编译64位程序:
使用windres链接图标指定64位架构:
windres -i ico.rc -o ico64.o -F pe-x86-64
然后一起编译(使用-m64参数指定64位程序):
g++ -m64 main.cpp ico64.o -o Main64.exe
效果一样。
可见链接图标时指定架构就是windres命令加上-F参数即可,-F后面为pe-x86-64则指定链接为64位的资源文件,为pe-i386则指定链接为32位资源文件。
c语言程序编译添加图标也是一样的,这里是以c++为例。