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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

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

コマンドプロンプト

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

Q&A

解決済

2回答

22442閲覧

gccでのコンパイルができません。

nabe_yjm

総合スコア12

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GCC

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

コマンドプロンプト

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

0グッド

0クリップ

投稿2019/04/26 15:19

前提・実現したいこと

C言語初心者です。
C言語からコマンドプロンプトを起動し、コマンドを入力するプログラムを作成しています。
具体的には、ユーザが入力したソースコードをコピペしたsource.cを生成し、それをgccで
コンパイル・ビルドするというものです。コマンドは「gcc source.c」です。

発生している問題・エラーメッセージ

上記のコマンドをプログラムが入力したときに、
c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../libmingw32.a(main.o):(.text.startup+0xb0): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
というエラーメッセージがでてコンパイルができません。
しかし、私自身がコマンドプロンプトを開いて手動でコマンドを入力するとなんなくa.exeを生成してくれます。原因がさっぱり分からなくて困っています。gccに詳しい方、ご説明の程よろしくお願いします。

該当のソースコード

#include<stdio.h> #include<string.h> #include<stdlib.h> int main(void) { static char str[1000][100000]; char gcc_command[5000]; int source_end; int i, j, k; printf("input your source_code>>\n");//ソースコードを入力 for (i = 0; 1 ; i++) { scanf(" %[^\n\r]", str[i]); if (!strcmp(str[i], "end")) { source_end = i; break; } } FILE* fp;//ユーザが入力したソースコードをコピペするsource.cの生成 fp = fopen("source.c", "w+"); for (i = 0; i < source_end; i++) { fprintf(fp, "%s\n", str[i]); } system("gcc source.c -o test");//cmd上でgccコマンドを入力 fclose(fp); return 0; }

試したこと

エラーメッセージでググってみましたが、似たような現象の人はいませんでした。自分と同じ現象でなくても参考になるかなとも思って調べましたが、特に参考になるものはありませんでした。

補足情報(FW/ツールのバージョンなど)

gcc (MinGW.org GCC-8.2.0-3) 8.2.0

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chironian

2019/04/26 15:24

「上記のコマンドをプログラムが入力したときに、」とはどういう意味でしょうか? もう少し詳しく。
nabe_yjm

2019/04/26 15:27

gcc source.cというコマンドをsystem関数を用いた入力したときに、という意味です。わかりにくくてすみません;
dodox86

2019/04/26 15:32

少なくとも一点、fcloseする前にコンパイルしては、ファイルが未完成だからダメなのではないかと。
guest

回答2

0

こんにちは。

再現しました。
どうも MinGW はソース・ファイルが空の時、そのようなエラーを出力するようです。
fclose(fp);する前にコンパイルしていますが、クローズしないとバッファに書かれただけでファイルへ書き込みされていない場合が少なくありません。
今回もファイル書き出し前にコンパイルした結果、ファイルサイズが0のままとなりWinMainなしエラーになっているようです。

fclose(fp);をsystem関数より前に持ってくることで回避できます。

投稿2019/04/26 16:02

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nabe_yjm

2019/04/27 12:52

なるほど、あまりMinGWの仕様を知らずに使用していたので、今回のような事態が発生してしまいました・・・。次からはもっと仕様をよく読んでから使用するように心がけます。ありがとうございました。
guest

0

自己解決

dodox86さん

 fcloseは盲点でした・・・。systemの前にfcloseを入れたところ、普通にコンパイルすることができました!こんな初歩的なミスを指摘されて恥ずかしい限りです・・・。ありがとうございました。

投稿2019/04/26 15:41

nabe_yjm

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問