【问题标题】:G++ include .rc files from cmdG++ 包含来自 cmd 的 .rc 文件
【发布时间】:2019-01-16 19:56:19
【问题描述】:

我使用资源(.rc 文件)制作了一个简单的 WIN32 项目。

当我使用 code::blocks 编译时,对话框显示, 但是从 cmd 使用 g++ 编译时不会。

尝试将 .rc 作为参数包含在 g++ 中会导致:
main.rc: file not recognized: File format not recognized collect2.exe: error: ld returned 1 exit status

如何在 cmd 中将 .rc 文件包含到 g++ 中?

编辑: 我试着用windres做:
windres main.rc -o res.o
g++ -c win_main.cpp resource.h -o source.o
g++ -o Executable res.o source.o

我得到了同样的错误,但 main.o 而不是 main.rc 无法识别。

【问题讨论】:

    标签: c++ windows winapi cmd g++


    【解决方案1】:

    .rc 文件不馈送到 gcc,它们必须由 windres(相当于 MS 的 rc.exe 的 gcc)处理,您使用 windres 从 .rc 创建一个 .o 文件,然后将其馈送。 o 到 gcc(或 ld)作为最终链接阶段的一部分。

    windres my_file.rc my_file.o
    gcc -o my_final <other parameters> my_file.o
    

    windres 还有其他潜在的参数,请查看手册页了解详细信息。

    【讨论】:

      【解决方案2】:

      MS资源工具和GNU工具的主要区别在于MS RC生成'.res'文件是一种特殊的二进制资源格式,可以直接传递给MS链接,而GNU链接器LD只支持'.o'(同'.obj') 格式。所以作为@SornelHaetir 的回答,你需要使用windres: windres main.rc -o res.o

      我还想指出的是,您不应该“编译”.h 文件。这样做会创建预编译的头文件,这些头文件不用于创建可执行文件,然后导致xxx.o: file not recognized: File format not recognized。由于#include 指令,Builder 能够自己找到这些头文件。见类似问题here

      【讨论】:

      • 删除头文件作为 g++ 的参数就可以了。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多