如何在 Code::Blocks 中编译和 link 图像

How to compile and link an image in Code::Blocks

我正在使用 Code::Blocks,我想编译 link 我的程序的图标与程序的其余部分。图标文件是一个名为 icon.png 的 PNG 图片,位于工作区项目文件夹的 Others 文件夹中。我右键单击它并在选项菜单中选中 "Compile file" 和 "Link file"。如果这有点不清楚,我制作了一个屏幕截图,准确显示了我所做的事情:

无论如何,问题是编译器给我一条错误消息,上面写着 "No such file or directory"。如果我检查 "Compile file" 而不是 "Link file",编译工作正常但图像未编译。

我想知道如何在不收到错误消息的情况下编译图像文件。

先解开误会:)

编译 是将您的源代码 转换为包含机器代码的目标文件的行为。 链接 正在解决这些 目标文件 之间的依赖关系并输出可用的 executable/library.

因此,编译或 link 图像没有意义。


当然有一些方法可以将图像放入您的程序中:

  • 将您的程序作为存档分发并使用文件 IO
  • 将图像转换为字节数组并将其放入 C 文件中。 xxd -i 命令就是这样做的
  • 把它变成一个目标文件然后link它。查看 this question
  • 的答案

问题是,您想要的是告诉文件管理器有一个图标及其位置。文件管理器不会知道您的字节数组或额外部分。

在 Windows 上,PE 可执行文件可以包含预定义的 .rsrc 部分,其中可以指定要使用的图标。您写了一个 resource file, which is then compiled by a special compiler into an object file you can link against. Here's an answer 关于使用 MinGW 做到这一点的文章。