私はプロジェクトの初期段階(読んでいる:昨日始まったばかりです)におり、私は最初のmakefileを設定しています。非常に単純です。ここでは、ファイルの完全な内容です:4.5.2 ++私はそれは私がWindows上で働いていることを言及することが重要だと思います。この時点でこれらのg ++の "多重定義"エラーは何ですか?
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
を、私はMinGWのgはどちらかPowerShellでこのすべてをやっていますか、 else Cygwinとg ++ 3.4.4(私は両方とも同じエラーを試しました)。
上記のすべてのファイルの内容を表示しないで、main.hにはwindows.hとresource.hへの参照が含まれていればよく、main.cppにはmain.hへの参照といくつかの関数最も重要なのは、int WINAPI WinMain(...)関数とLRESULT CALLBACK WndProc(...)関数で、resource.rcには、ファイルメニューとダミーの第2メニューを持つ単純なメニューバーとリファレンスresource.hに、そしてresource.hは単にresource.rcで使用されるIDの#defineステートメントを含んでいます。
ここで、resource.rcとmain.hの両方をお互いにコンパイルして、これらの2つのnice .oファイルを取得できます。
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で生成されます。私はそれらをリンクしてoutput.exe生成しようとすると、しかし、私は本当に理解していずれもエラー、次の怖いのリストを取得します。 Cygwinは "多重定義"ステートメントを中心に、非常に似たエラーリストを提供します。複数の定義はC:/mingw/lib/crt2.oに由来するように見えますが、crt1.cという別のファイルもあります。これは明らかにCが.oファイルよりもはるかに読みやすくなりますが私はC:\ MinGWフォルダ内のどこでもそのタイトルで何かを見つけることができません。
私はかなり迷っていますので、どんな方向にも役立ちます。
EDIT:main.cppに中 唯一の#includeステートメント:main.hの
#include "main.h"
内容:
#ifndef _MAIN_H_
#define _MAIN_H_
#include <windows.h>
#include "resource.h"
#endif
少なくとも
-Wall
は、おそらくそれはヘッダが含まれているmain.cppにファイルの最初の部分を見るために役立つだろう、同様の警告フラグを追加する必要があります。明示的にインクルードされているヘッダーの1つが別のヘッダーファイルに暗黙的にインクルードされる必要があることを理解することで解決された、これと同様の問題があることを思い出しました。 – hardmath'_MAIN_H_'で先頭のアンダースコアを使用しないでください。先頭のアンダースコアの名前はライブラリ用に予約されています。 – KitsuneYMG