Я на начальных этапах (читай: только что начался вчера) проекта, и я настраиваю свой начальный make-файл.Это очень упрощенно.Вот полное содержимое файла:
all: main.o resource.o
g++ -o output.exe main.o resource.o
main.o: main.cpp main.h resource.h
g++ -mwindows -o main.o main.cpp
resource.o: resource.rc
windres resource.rc resource.o
clean:
rm *.o
На данный момент я думаю, что важно упомянуть, что я работаю на Windows, поэтому я делаю все это в Powershell с MinGW g ++ 4.5.2 или с Cygwin и g ++ 3.4.4 (я пробовал оба; одни и те же ошибки).
Без вывода на печать содержимого всех перечисленных выше файлов достаточно сказать, что main.h содержит ссылкуДля windows.h и resource.h main.cpp содержит ссылку на main.h и несколько функций, наиболее важные из них - функцию WINAPI WinMain (...) int и функцию WndProc (...) WALLProC (...) LRESULT CALLBACK.rc содержит операторы определения ресурса для простой строки меню с файловым меню и фиктивным вторым меню, а также ссылку на resource.h, а resource.h просто содержит #define операторы для идентификаторов, используемых в resource.rc.
Теперь я могу скомпилировать и resource.rc, и main.h отдельно друг от друга и получить эти два замечательных .o файла.Однако, когда я пытаюсь связать их и создать output.exe, я получаю следующий страшный список ошибок, ни одну из которых я действительно не понимаю:
main.o:main.cpp:(.text+0x0): multiple definition of `mainCRTStartup'
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../crt2.o:crt1.c:(.text+0x160): first defined here
main.o:main.cpp:(.text+0x0): multiple definition of `WinMainCRTStartup'
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../crt2.o:crt1.c:(.text+0x140): first defined here
collect2: ld returned 1 exit status
make: *** [all] Error 1
Выше написано в Powershell.Cygwin приводит очень похожий список ошибок, по-прежнему сосредоточенный вокруг операторов «множественного определения».Множественные определения, похоже, берут свое начало в C: /mingw/lib/crt2.o и, возможно, в другом файле с именем crt1.c, который может показаться более полезным, поскольку очевидно, что C гораздо более удобочитаем, чем файл .o, ноЯ ничего не могу найти с таким названием в папке C: \ MinGW.
Любое направление было бы полезно, потому что в данный момент я довольно растерялся.
РЕДАКТИРОВАТЬ:Единственный оператор #include в main.cpp:
#include "main.h"
Содержимое main.h:
#ifndef _MAIN_H_
#define _MAIN_H_
#include <windows.h>
#include "resource.h"
#endif