• ベストアンサー

VC++でエラー

--------------------構成: 01 - Win32 Debug-------------------- コンパイル中... text.cpp リンク中... LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Debug/01.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー 01.exe - エラー 2、警告 0 な、なんだ?? 何が起こったんだ?? 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • YoshiMu
  • ベストアンサー率41% (96/229)
回答No.4

Win32 Applicationとは、WinMainから開始されるイベント駆動型のプログラム。 Win32 Console Applicationとは、mainから開始される昔ながらのプログラム。 と、簡単にくくってしまったところで納得行かないでしょうし、実際にはWinMainから始まってもイベント駆動型ではないプログラムも作成できますから。 コンパイラのオプションをよく調べてみますと、/Subsystem:windowsってのが見つかると思うのですよ。これがあると、WinMainから始まるはずだ、とコンパイラは考えるわけですね。 逆に、/Subsystem:consoleと書かれていた場合、mainから始まるはずだ、と考えるわけです。 では、/Subsystemの指定がない場合には、mainがあれば、consoleのつもり、WinMainがあれば、windowsのつもりでコンパイルされるとのこと。 Win32 Applicationで新規作成すると、/Subsystem:windowsになっています。

参考URL:
http://www.microsoft.com/JAPAN/developer/library/vccore/_core_.2f.subsystem.htm
Ginga
質問者

お礼

詳しいんですね。 とても参考になりました。 ありがとうございました。

その他の回答 (3)

noname#9414
noname#9414
回答No.3

補足読みました。 フリーソフト作成者ねぇ・・・私もそうですが。 一応慣れないうちはウィザードを使ってもいいかと 思います。 ただ、補足を見た限りでは、以下の方法でコンパイル するだけで充分だと思います。 1.Visual C++を起動する。 2.新規作成ボタンを押す(メニューでなくツールバー) 3.出てきた画面に下のソースを貼り付ける。 4.メニューの「ビルド」「ビルド」を選択し、ビルド。 5.なにやら聞いてくるけど、すべて「はい」を押す。 以上。 ついでにいうのであれば、ANSI Cの勉強をするので あれば、PC-UNIXのCCか、WindowsであればLSI-Cを お薦めしますよ。 #コンソールでコンパイルすることになりますが・・・ ではでは☆

Ginga
質問者

お礼

ありがとうございました。 うまくいきました。 やる気出てきたよ。頑張ります。

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.2

補足のソースコードそのままでコンパイル出来て実行出来ました。  エラーの内容:  そのままですね。WinMainシンボルがないよって言っているのです。  そんなもん使っていないって言われるかもしれませんが、プロジェクトの作成方法が間違っている可能性が高いので、プロジェクトの作り方から補足下さい。  ちなみに、ウィザードは仕組みを理解して使えば便利です。よ。  私は、”Win32 Console Application"でプロジェクトを作成して、組込みプリヘッダーの使用しないにして、コンパイル・リンクして、EXEを作成して実行しました。

Ginga
質問者

お礼

Win32 Applicationで作りました。 Win32 Console Applicationと何が違うのですか? 初心者ですからもう少し詳しくお願いします。 ありがとうございました

noname#9414
noname#9414
回答No.1

基本的にVisual C++でプログラムを作成するときには アプリケーションウィザードで作成する(Windowsの プログラム)かmain()関数を含むプログラムを作成して それをコンパイルするかです。 ソースファイルの中身を見ないと詳しいことは 分かりませんが、Windowsプログラムを作成する のであれば、アプリケーションウィザードを使用 することをお薦めしますよ。 #うまくリンクさせれば、ウィザードはいらない #のだと思いますが、ウィザードを使うのが一番 #簡単だと思いますよ。 ではでは☆

Ginga
質問者

お礼

ありがとうございます。 ソースはこちら。 /* 計算を行う */ #include <iostream.h> int main(void) { int x; int y; cout << "x ?"; cin >> x; cout << "y ?"; cin >> y; cout << "x+yは"<<x+y<<"です\n"; return (0); } ちなみに解説書に載ってました。 フリーソフトを作っている方に教えていただいたのですが、 ウィザードは使わないほうがいいとの事です。 (おまえ初心者なんだから使えよって感じですが、 僕自身こだわるタイプですんで。) このエラーの意味を聞いたのですが、説明不足でした。 どういう意味ですか?