G ++ включает .rc файлы из cmd - PullRequest
       5

G ++ включает .rc файлы из cmd

0 голосов
/ 16 января 2019

Я сделал простой проект WIN32, используя ресурсы (файлы .rc).

Когда я компилирую с code :: blocks, отображается диалоговое окно, но при компиляции с g ++ из cmd это не так.

Попытка включить .rc в качестве аргумента для g ++ приводит к следующему:
main.rc: file not recognized: File format not recognized collect2.exe: error: ld returned 1 exit status

Как включить файл .rc в g ++ в cmd?

Edit: Я пытался с помощью виндрес делать:
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 не распознано.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Основное различие между инструментами ресурсов MS и инструментами GNU заключается в том, что MS RC генерирует файлы '.res' в специальном двоичном формате ресурсов, который может передаваться непосредственно в ссылки MS, в то время как GNU linker LD поддерживает только '.o' ( такой же, как формат '.obj'). Итак, как ответ @SoronelHaetir, вам нужно использовать windres: windres main.rc -o res.o

Что еще я хочу отметить, вы не должны «компилировать» .h файлы. Это создаст предварительно скомпилированные заголовочные файлы, которые не используются для создания исполняемого файла, а затем вызовет xxx.o: file not recognized: File format not recognized. Builder может найти эти заголовочные файлы самостоятельно благодаря директивам #include. Смотрите похожую проблему здесь .

0 голосов
/ 16 января 2019

.rc файлы не передаются в gcc, они должны обрабатываться windres (gcc эквивалент MS 'rc.exe), вы используете windres для создания .o файла из .rc, а затем передаете его. o к gcc (или ld) как часть вашей последней стадии ссылки.

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

Существуют и другие потенциальные аргументы для виндрес, подробности смотрите на странице справочника.

...