質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

コンパイラ

コンパイラは、プログラミング言語で記述したソースコードを、コンピュータの実行形式であるオブジェクトコードに変換するプログラムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

makefile gccコンパイラ int main()関数を定義しているのに エラー「 undefined reference to `WinMain@16'」 の原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

コンパイラ

コンパイラは、プログラミング言語で記述したソースコードを、コンピュータの実行形式であるオブジェクトコードに変換するプログラムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1回答

0グッド

0クリップ

2179閲覧

投稿2021/11/15 02:27

編集2021/11/15 03:07

提示コードですが以下のMain.cppを定義しているにもかかわらずなぜコマンドプロンプトのようなエラーが出るのでしょうか?
int main()関数の引数を触ったり、しましたが原因がわかりません。これまではlinux上ではこれでコンパイル出来ていたのですがwindowに持ってきたところエラーが出ます。

環境

OS windows10
GNU make
g++

参考サイト: https://cat-in-136.github.io/2010/03/mingw32undefined-reference-to-winmain16.html

参考サイト:https://teratail.com/questions/186625

参考サイト: https://se.cite.ehime-u.ac.jp/jp/lecture/prog/faq/undefined-reference-to-winmain16-%E3%81%A8%E3%81%84%E3%81%A3%E3%81%9F%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%82%8B/

コマンドプロンプト
C:\Users\yw325\Desktop\TopViewGame>make g++ -o program -L -l FrameWork.lib -lglfw3 -lfreetype c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../libmingw32.a(main.o):(.text.startup+0xc0): undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status make: *** [program] エラー 1
Main.cpp
#include <iostream> #include <stdio.h> #include <memory> #include "../../FrameWork/header/FrameWork.hpp" #include "../../FrameWork/header/Resource.hpp" #include "../../FrameWork/header/Camera.hpp" #include "../../FrameWork/header/VertexData.hpp" #include "../header/Entry.hpp" int main(int, char**) { FrameWork::Init(glm::ivec2(800, 600), glm::ivec2(4, 5), "FrameWork"); //初期化 std::unique_ptr<Entry> entry = std::make_unique<Entry>(); while (*FrameWork::windowContext) { FrameWork::windowContext->FrameUpdate(glm::vec4(0, 0, 0, 255)); entry->Loop(); FrameWork::windowContext->Wait(); FrameWork::windowContext->SwapBuffers(); } return 0; }
Makefile
PRG :=program STATIC_LIB :=FrameWork.lib FRAMEWORK_SRC_DIR :=FrameWork/source/ GAME_SRC_DIR :=Game/source/ FRAMEWORK_OBJ_DIR :=FrameWork/obj GAME_OBJ_DIR :=Game/obj FRAMEWORK_DEP_DIR :=$(FRAMEWORK_OBJ_DIR) GAME_DEP_DIR :=$(GAME_OBJ_DIR) FRAMEWORK_SRC :=$(wildcard $(FRAMEWORK_SRC_DIR)/*.cpp) GAME_SRC :=$(wildcard $(GAME_SRC_DIR)/*.cpp) FRAMEWORK_OBJ :=$(addprefix $(FRAMEWORK_OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(FRAMEWORK_SRC)))) GAME_OBJ :=$(addprefix $(GAME_OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(GAME_SRC)))) FRAMEWORK_DEP :=$(wildcard $(FRAMEWORK_DEP_DIR)/*.d) GAME_DEP :=$(wildcard $(GAME_DEP_DIR)/*.d) $(PRG): $(GAME_OBJ) $(STATIC_LIB) #$(CXX) $(GAME_OBJ) -o $@ -ldl -lGLESv2 -lassimp -L -l $(STATIC_LIB) -L/usr/local/lib -lGLU -lGL -lglfw3 -pthread -lGL -lGLEW -lfreetype -lX11 $(CXX) $(GAME_OBJ) -o $@ -L -l $(STATIC_LIB) -lglfw3 -lfreetype $(STATIC_LIB): $(FRAMEWORK_OBJ) ar rc $@ $^ ranlib $@ $(FRAMEWORK_OBJ_DIR)/%.o: FrameWork/source/%.cpp $(CXX) -std=c++2a -I/usr/local/include/freetype2 -I/usr/local/include/glm -I/usr/include/libpng16 -I/usr/local/include -pthread -c -MMD -MP $< -o $@ -include $(FRAMEWORK_DEP) $(GAME_OBJ_DIR)/%.o: Game/source/%.cpp $(CXX) -std=c++2a -I/usr/local/include/freetype2 -I/usr/local/include/glm -I/usr/include/libpng16 -I/usr/local/include -pthread -c -MMD -MP $< -o $@ -include $(GAME_DEP) clean: rm -f ./$(FRAMEWORK_OBJ_DIR)/*.o *.out ./$(FRAMEWORK_OBJ_DIR)/*.d *.a $(STATIC_LIB) rm -f ./$(GAME_OBJ_DIR)/*.o *.out ./$(GAME_OBJ_DIR)/*.d *.a $(PRG)

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2021/11/15 02:52依頼された後にこの質問は修正されています

こちらの質問が複数のユーザーから「過去の低評価」という指摘を受けました。

回答1

1

ベストアンサー

g++ -o program -L -l FrameWork.lib -lglfw3 -lfreetype

Main.o とか、オブジェクトファイルを何も指定していないからでしょう。Makefile 中で GAME_OBJ が空っぽということです。

投稿2021/11/15 02:44

編集2021/11/15 02:45
int32_t

総合スコア17195

退会済みユーザー👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

退会済みユーザー

退会済みユーザー

2021/11/15 02:50

なるほどmakefile上でGAME_OBJにオブジェクトファイルが出力されるように指定していますが では何が原因なのでしょうか?
int32_t

2021/11/15 03:01

ぱっと見、間違いは見つかりませんね。 まずは使っているmakeコマンドがGNU make なのかどうかを確認。次は GAME_SRC の中身を確認。GAME_SRC が意図通りなら $(notdir $(GAME_SRC)) が意図通りになるかどうか確認…のようにしてどこに問題があるか切り分けましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

GCC

GCCはGNU Compiler Collectionの略です。LinuxのC言語コンパイラのデファクトスタンダードであり、数多くの他言語やプラットフォームサポートもします。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

コンパイラ

コンパイラは、プログラミング言語で記述したソースコードを、コンピュータの実行形式であるオブジェクトコードに変換するプログラムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。