MS VC++コンパイルエラーなし...ビルドエラー

このQ&Aのポイント
  • Microsoft Visual C++で新規作成したWin32 Applicationのビルド時に、エラーが発生します。
  • ビルドエラーの原因は、外部シンボル"_WinMain@16"の未解決です。
  • 解決法を教えてください。
回答を見る
  • ベストアンサー

MS VC++コンパイルエラーなし...ビルドエラー

Microsoft Visual C++ で、新規作成 - 「プロジェクト」 - Win32 Application で作成し、「ファイル」-  C++ソースファイルで、main.cpp と言う名前で、以下のソースを作成しました。 #include <stdio.h> #include <stdlib.h> void main(int argc) { FILE *Fout; Fout = fopen("Date.ini" , "W "); fprintf(Fout , "%d" ,argc); fclose( Fout); } 別に作成したdllが、fscanfするためのテキストファイルを日次ハバッチで、作成したいと思っています。 尚、ここでfprintfするデータは、パラメータとして、読み込みたいと思っています。 (Visual BASICの command関数のように) 上記のソース、コンパイルは、通るのですが、ビルドすると以下のエラーが出ます。 「LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16"は未解決です Debug/Date_ini.exe : fatalerror LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー 解決法をご教示いただきたく思います。 宜しくお願い致します。

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

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.1

Win32 ApplicationにはWinMainが必要です。 mainで作るならWin32 Console Applicationで作りましょう。 プロジェクトの再構築が無理なら、プロジェクト設定の/systemオプションを/system windowsから/system consoleに変更してください。 質問とは別の話ですが… void main(int argc) これはANSI-Cの規約違反です。 「mainはintの値を返し、0個または2個の引数をとる」 int main(int argc, char *argv[]) と書きましょう。

sara__
質問者

お礼

ありがとうございました。 学生のときにも、同じエラーが出た経験はあったのですが、周囲の人間にあっさり解決してもらって、解決法を全く忘れてしまっていました。 実務では、初めてC言語でプログラミングしています。 これからも、参考にさせていただきます。 ありがとうございました。

その他の回答 (2)

  • ShaneOMac
  • ベストアンサー率39% (356/898)
回答No.3

私はVBとか他のことは全く分かりませんから、とりあえずCとして動くスタンダードなソースを書くとすると以下のようになります。 #include <stdio.h> #include <stdlib.h> int main(int ac, char *av[]) { int d; FILE *fp; if(!(fp=fopen("test","w"))){ ;//オープン失敗のエラー処理を入れる } d=atoi(av[1]); fprintf(fp,"%d",d); fclose(fp); return 0; } コマンドラインで取った値は配列ですからav[0]がそのプログラムの名前になり、スペースで区切って入力された文字列を[1]、[2]と取っていきます。実際にいくつ入力されたかカウントするのがacです。 参考書は好みもありますから決定的なことは言えませんが、CやC++で初心者向きということなら技術評論社から出ている塚越一雄著のものが読み進めやすいと思います。

sara__
質問者

お礼

ありがとうございました。 上記のアドバイスにより、解決しました。 「プログラムが実行できないので、exeファイルも作成できない...という状態です。」・・・という状況は、原因は、わかりませんが、新規に作成して書き直したら、解決しました。 ありがとうございました。

  • ShaneOMac
  • ベストアンサー率39% (356/898)
回答No.2

#1の補足ですが、コマンドライン引数の考え方についてはもう一度参考書を読まれた方が良いと思います。 恐らくコマンドライン引数で何らかのint値を受けたいと考えていらっしゃるようですが、入力されるものといえばあくまで文字列ですからchar型ポインタでしかデータを受けられません。 main(int ac, char *av[]) とやった場合は、acは実際にいくつの引数が入力されたかカウントし、avの方でデータを取り出します。 mainは暗黙的にint型です。最後にreturn 0;などして抜けるようにしまう。

sara__
質問者

お礼

ありがとうございます。 上記のアドバイス通りで、行ったところ、ビルドエラーは解決しました。 ご指摘の通り、コマンドライン引数について、あまりよく分かっていません。 もし、お薦めの参考書等がありましたら、ご紹介いただければ...と思います。 それから、今のソースのままですと、「プログラムを実行できません。」というメッセージが出てきてしまいます。 VBで、command関数を記述した場合には、バッチファイルで、*.exe %1 として、テストを行いました。 プログラムが実行できないので、exeファイルも作成できない...という状態です。 別にC言語にこだわる必要もないのですが、fprintfの部分については、C言語の方の知識があったので、Cによる実装を試みている次第です。 どうぞ、アドバイスを宜しくお願い致します。

sara__
質問者

補足

以下のお礼の文章、補足のところに記述すべきであったと思います。 今一度、アドバイスを宜しくお願い致します。

関連するQ&A

  • ビルドエラー

    初心者なので 質問も的を得ないとは思いますが どうかよろしくお願いします。 ビルドを実行すると リンク中... main.obj : error LNK2001: 外部シンボル "_prdate" は未解決です Debug/nissuukeisan.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー となり警告2、との表示がでます。 これは単にプログラムミスによるものなのでしょうか? 曖昧な質問で申し訳ありませんが よろしくお願いします。

  • VC6.0でエラー

    環境:winNT4.0,vc6.0 コンソールアプリケーション作成でデバックモードではエラー、警告は、出ないのですが リリースモードで下記のようなエラーがでます。 エラーを消すにはどうしたらよいのでしょうか? 宜しくお願いします。 --------------------構成: muktc - Win32 Release-------------------- リンク中... muktc.obj : error LNK2001: 外部シンボル "_WSACleanup@0" は未解決です muktc.obj : error LNK2001: 外部シンボル "_WSAStartup@8" は未解決です muktc.obj : error LNK2001: 外部シンボル "_WSAGetLastError@0" は未解決です muktc.obj : error LNK2001: 外部シンボル "_gethostname@8" は未解決です muktc.obj : error LNK2001: 外部シンボル "_NetRemoteTOD@8" は未解決です Release/muktc.exe : fatal error LNK1120: 外部参照 5 が未解決です。 link.exe の実行エラー muktc.exe - エラー 6、警告 0

  • ビルドする時のエラー。(初心者です)

    リンク中... LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/MousMov.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー というエラーがでます。 何がいけなくて対処方法はどうすればいいのでしょう。 初めてビルドするときは、エラーは何も出ないのですがもう一回するとこのエラーがでます。どうすればいいんですか?よろしくお願いします。

  • CのDLLをVC++でコンパイルしたいのですが、エラーになってしまいます。

    c言語の初心者なのですが、質問させて下さい。 javaからCのDLLを呼び出したく、 (下記のソースを書いたのですが、VC++でコンパイルすると LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/HelloWorld.exe : fatal error LNK1120: 外部参照 1 が未解決です。 と出てしまいます。 過去ログ等を見て、作成しているプロジェクトが悪いのかなと思い、 MFC appWizark(dll) win32 Application win32 Console Application win32 Dynamic-Link Library 等を作ってみてコンパイルしてみたのですが、駄目でした。 ちなみにDOSプロンプトで cl -IC:\j2sdk1.4.2_10\include\win32 -LD HelloWorl d.c -o HelloWorld.dll と実行するときちんとコンパイルできて、正常に実行も出来ました。 VC++でどうやればコンパイルできるのでしょうか? #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_printMessage (JNIEnv *env, jobject me) { printf("Helo World!!!\n"); return; }

  • LNK1120 エラーについて

    このエラーが出たら一体何が問題なんですか? このエラーが出た以降、Visual C++ 2008がずっと使えなくなってしまいました…。ちなみ、この時にビルドで出力されたのは SVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。 ■■■\Debug\tr3.exe : fatal error LNK1120: 外部参照 1 が未解決です。 …でした。 あと、入力したものは普通に #include <stdio.h> void main(){ printf ("Hello World"); } です

  • 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 な、なんだ?? 何が起こったんだ?? 教えてください。

  • ビルド時のエラー

    行列の計算をする関数をいくつか作り、 それをまとめたファイルmatrix.cを作りました。 自作関数の、M_ADD, M_SUBなどが含まれています。 mainのファイルでmatrix.cをインクルードして、 ビルドしようとしたところ、コンパイルはうまくいくのですが、 リンク時にエラーが起こってしまいました。 具体的には、以下のような感じです。 Linking... matrix.obj : error LNK2005: _M_ADD already defined in main.obj matrix.obj : error LNK2005: _M_SUB already defined in main.obj Debug/計算.exe : fatal error LNK1169: one or more multiply defined symbols found Error executing link.exe. already defined と怒られていますが、 ほかの場所でそんな名前の関数を作った覚えはありません。 関数名をいろいろ変えてみてもだめでした。 ウェブサイトを調べてみても、見当たりませんでした。 これはどういうことなのでしょうか? どうすれば解消できるのでしょうか? どなたかわかるかた、教えていただけませんか? よろしくお願いします。 ちなみに、Visual C++ 6.0を使用しています。

  • OpenNIの動作について

    OpenNIをvisual studio2008で動作させようとしています。 そこで以下のメッセージが出て動作しません。インクルードファイルのリンクはしたつもりなのですが、参照できていないのでしょうか。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceCreateStream" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniFrameRelease" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceIsPropertySupported" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniStreamGetSensorInfo" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceClose" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniShutdown" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniGetExtendedError" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniWaitForAnyStream" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniInitialize" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniStreamStart" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceGetInfo" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniStreamIsPropertySupported" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceOpen" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceGetSensorInfo" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniStreamDestroy" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniStreamStop" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniStreamReadFrame" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceIsCommandSupported" は未解決です。 1>C:\Users\sakata\Documents\Visual Studio 2008\Projects\openNI_test\Release\openNI_test.exe : fatal error LNK1120: 外部参照 18 が未解決です。 以上です。 追加のインクルードディレクトリには C:\Program Files\OpenNI2\Include\Win32 C:\Program Files\OpenNI2\Include 追加のライブラリディレクトリには "C:\Program Files\OpenNI2\Lib" を追加しました。 環境変数はOpenNIをインストールしたときに勝手に追加されたので間違っていないと思います。 環境は以下です。 OS:Windows7 32bit OpenNIはOpenNI2を入れています。(2013年6月現在で最新?) もちろん32bit版です。 動作カメラはXtionです。ドライバインストール済みで、サンプルプログラムの.exeファイルでの動作は確認しています。 他の質問でx64でビルドすれば通るなどと書いてありますが、それは64bit版OSの話ですよね? 原因わかる方、回答お願いします。

  • DirectX8 & VC++ ビルドできない!

    今、「DirectX8&VC++」という本を使ってそこに書いてあるプログラムをうつしてビルドしようとしたのですが、 --------------------構成: kihon2_3 - Win32 Debug-------------------- リンク中... kihon2_3.obj : error LNK2001: 外部シンボル ""long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)" は未解決です Debug/kihon2_3.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー kihon2_3.exe - エラー 2、警告 0 というエラーが出てしまいました。 VC自体使い慣れていないのでどんなエラーかも理解できません。 よろしければご存知の方がいれば教えてもらえないでしょうか? お願いします。

  • DB2付きのC言語がコンパイルできません。

    CはMicrosoftVisualStudio2012 DBはIBM DB2 です。 同じ環境でコンパイル実行できていたのに、 PCがおかしくなったのでフォーマットして入れなおしたらコンパイルができなくなりました。 よろしくおねがいします。 ソースはこちらです。 #include <stdio.h> exec sql include sqlca; void main() { exec sql connect to sample; if(SQLCODE!=0) { printf("SQL CONNECT %d", SQLCODE); } else { exec sql update Test1 set col2 = 'bababa'; if(SQLCODE!=0) printf("SQL UPDATE %d", SQLCODE); } exec sql connect reset; } コンパイルコマンドです db2 connect to sample db2 prep Test11.sqc bindfile db2 bind Test11.bnd cl -Z7 -c -W2 -D_X86_=1 -DWIN32 -I"c:\Program Files\IBM\SQLLIB\include" Test11.c link -debugtype:cv -outTest11.exe %1.obj "c:\Program Files\IBM\SQLLIB\lib\db2api.lib" エラーメッセージです Test11.obj : error LNK2019: 未解決の外部シンボル _sqlaaloc@16 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlacall@20 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlasetdata@24 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastop@4 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastrt@12 が関数 _main で参照されました。 Test11.exe : fatal error LNK1120: 5 件の未解決の外部参照

専門家に質問してみよう