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

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

新規登録して質問してみよう
ただいま回答率
85.50%
g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

C++

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

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

Q&A

解決済

3回答

3782閲覧

MinGWのg++とstd::vectorの相性(?)

metamorphosis

総合スコア11

g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

C++

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

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

0グッド

1クリップ

投稿2018/04/16 05:36

編集2018/04/16 06:32

C++初心者です。

MinGWのg++コンパイラを用いてC++のプログラミングをしているのですが、プログラム中で一回でもvectorを用いると出力に何も表示されなくなってしまいます。vectorを1つでも宣言した時点で駄目になります。コンパイル・実行は何の問題もなく通ります。自分の書いたコードが間違っているのかもしれないと思い、std::vectorを用いた簡単なプログラムをネットからいくつか引っ張ってきてそのまま実行してみましたが、同様に何も出力されませんでした。

g++とstd::vectorの相性が悪いのでしょうか?

[追記]

1.) g++のバージョンは以下の通りです.

g++ --version g++.exe (MinGW.org GCC-6.3.0-1) 6.3.0 Copyright (C) 2016 Free Software Foundation, Inc.

2.) git bash上でコンパイル(MinGW/bin/g++.exe hoge.cpp)、実行(./a.exe)しています.

3.) 実行したプログラムは以下の通りです.シェルソート(http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_2_D)を行うプログラムになります.

cpp

1#include<cstdio> 2#include<algorithm> 3#include<vector> 4using namespace std; 5 6long long cnt; 7int l; 8int A[1000000]; 9int n; 10vector<int> G; 11 12void insertionSort(int A[], int n , int g){ 13 for(int i = g; i < n; i++){ 14 int v = A[i]; 15 int j = i-g; 16 while(j >= 0 && A[j] > v){ 17 A[j+g] = A[j]; 18 j -= g; 19 cnt++; 20 } 21 A[j+g] = v; 22 } 23} 24 25void shellSort(int A[], int n){ 26 int h = 1; 27 while(h <= n){ 28 G.push_back(h); 29 h = 3*h + 1; 30 } 31 32 for(int i = G.size()-1; i >= 0; i--){ 33 insertionSort(A, n, G[i]); 34 } 35} 36 37int main(){ 38 scanf("%d" , &n); 39 for(int i = 0; i < n; i++){ 40 scanf("%d" , &A[i]); 41 } 42 43 cnt = 0; 44 shellSort(A,n); 45 46 printf("%d\n", G.size()); 47 for(int i = G.size()-1; i >= 0; i--){ 48 printf("%d\n",G[i]); 49 } 50 51 for(int i = 0; i < n; i++){ 52 printf("%d\n", A[i]); 53 } 54 55 return 0; 56} 57

4.) プログラムを引っ張ってきたサイトはC++の日本語リファレンス(https://cpprefjp.github.io/reference/vector.html)です.

5.) 今cmd.exe上で同様にコンパイル・実行してみたところ、実行時に

プロシージャエントリポイント__gxx_personality_v0がダイナミックライブラリ(a.exeのPATH)から見つかりませんでした。

とのエラーダイアログが出ました.

今のところ考えつく情報はこれくらいです.よろしくお願いします.

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

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

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

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

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

kazto

2018/04/16 06:00

まずは、ご自身の作業内容が適切かを疑いましょう。コンパイルしたソース、コンパイル時のコマンドおよびオプションを追記してください。
metamorphosis

2018/04/16 06:22

反応ありがとうございます。現時点で思いつく限りの情報を追記しました。他にも必要な情報がありましたら教えていただけると嬉しいです。よろしくお願いいたします。
guest

回答3

0

ベストアンサー

もしかして、scanf入力前にhello worldが表示されない事を指してます?

main関数冒頭にsetvbuf(stdout, 0, _IONBF, 0);でも仕込んでおけばいいと思いますよ

git bashとMinGWで想定するlibstdc++.dllのバージョンが違います。
ビルド(リンク)時に-staticを指定するか
git bashでMinGW使うのやめてPATHにMinGW\binを入れる
もしくは、git bash+MinGWをやめてMSYS2にしましょう

投稿2018/04/16 06:22

編集2018/04/16 07:32
asm

総合スコア15147

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

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

metamorphosis

2018/04/16 06:34 編集

このprintf("hello world")はvectorの宣言により出力が表示されなくなった後に、出力の確認のために付け足したものです。ややこしいので問題文のソースコードから削除したいと思います。ごちゃごちゃしてしまいすみません。
asm

2018/04/16 06:39

scanfによる入力待ちに入ることは分かると思うんだけど 何か入力した結果、表示されずにシェルに戻る という事でいいのですか?
metamorphosis

2018/04/16 06:43 編集

入力をinput.txtに予め入れておいて、 ./a.exe < input.txt と実行しています。何も表示されずにシェルに戻ります。 今試しに入力を入れずにただ ./a.exe と実行したところ、入力待ちにならずにシェルに戻ってしまいました。mainが捕捉されてないのでしょうか??
asm

2018/04/16 06:54 編集

実は起動できてないのにgit bashあたりが握りつぶしてるんじゃないかと疑いたくなる挙動ですね… (もしくは起動するファイルがコンパイルしたものと違う) g++ -v ソースファイル でコンパイルした時にでるメッセージ全文出せますか? ついでに、単純なハローワールドは動くのでしょうか?
metamorphosis

2018/04/16 07:01

メッセージ全文です。 Using built-in specs. COLLECT_GCC=C:\MinGW\bin\g++.exe COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/lto-wrapper.exe Target: mingw32 Configured with: ../src/gcc-6.3.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --with-gmp=/mingw --with-mpfr=/mingw --with-mpc=/mingw --with-isl=/mingw --prefix=/mingw --disable-win32-registry --target=mingw32 --with-arch=i586 --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-6.3.0-1' --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --with-tune=generic --enable-libgomp --disable-libvtv --enable-nls Thread model: win32 gcc version 6.3.0 (MinGW.org GCC-6.3.0-1) COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=i586' c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/cc1plus.exe -quiet -v -iprefix c:\mingw\bin../lib/gcc/mingw32/6.3.0/ 12D.cpp -quiet -dumpbase 12D.cpp -mtune=generic -march=i586 -auxbase 12D -version -o C:\Users\foo\AppData\Local\Temp\cccCe02V.s GNU C++14 (MinGW.org GCC-6.3.0-1) version 6.3.0 (mingw32) compiled by GNU C version 6.3.0, GMP version 6.1.2, MPFR version 3.1.5, MPC version 1.0.2, isl version 0.15 warning: MPC header version 1.0.2 differs from library version 1.0.3. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "c:\mingw\bin../lib/gcc/mingw32/6.3.0/../../../../mingw32/include" ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/include/c++" ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/include/c++/mingw32" ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/include/c++/backward" ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/include" ignoring duplicate directory "/mingw/lib/gcc/mingw32/6.3.0/../../../../include" ignoring duplicate directory "c:/mingw/lib/gcc/../../include" ignoring duplicate directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/include-fixed" ignoring nonexistent directory "c:/mingw/lib/gcc/../../lib/gcc/mingw32/6.3.0/../../../../mingw32/include" ignoring duplicate directory "/mingw/include" #include "..." search starts here: #include <...> search starts here: c:\mingw\bin../lib/gcc/mingw32/6.3.0/include/c++ c:\mingw\bin../lib/gcc/mingw32/6.3.0/include/c++/mingw32 c:\mingw\bin../lib/gcc/mingw32/6.3.0/include/c++/backward c:\mingw\bin../lib/gcc/mingw32/6.3.0/include c:\mingw\bin../lib/gcc/mingw32/6.3.0/../../../../include c:\mingw\bin../lib/gcc/mingw32/6.3.0/include-fixed End of search list. GNU C++14 (MinGW.org GCC-6.3.0-1) version 6.3.0 (mingw32) compiled by GNU C version 6.3.0, GMP version 6.1.2, MPFR version 3.1.5, MPC version 1.0.2, isl version 0.15 warning: MPC header version 1.0.2 differs from library version 1.0.3. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: af09a87986453bf79da3565f33c7648f COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=i586' c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/as.exe -v -o C:\Users\foo\AppData\Local\Temp\ccpP6sIA.o C:\Users\foo\AppData\Local\Temp\cccCe02V.s GNU assembler version 2.28 (mingw32) using BFD version (GNU Binutils) 2.28 COMPILER_PATH=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/;c:/mingw/bin/../libexec/gcc/;c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ LIBRARY_PATH=c:/mingw/bin/../lib/gcc/mingw32/6.3.0/;c:/mingw/bin/../lib/gcc/;c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/lib/;c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../ COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=i586' c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/collect2.exe -plugin c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/liblto_plugin-0.dll -plugin-opt=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\Users\foo\AppData\Local\Temp\ccaeQwst.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -Bdynamic -u ___register_frame_info -u ___deregister_frame_info c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../crt2.o c:/mingw/bin/../lib/gcc/mingw32/6.3.0/crtbegin.o -Lc:/mingw/bin/../lib/gcc/mingw32/6.3.0 -Lc:/mingw/bin/../lib/gcc -Lc:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/lib -Lc:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../.. C:\Users\foo\AppData\Local\Temp\ccpP6sIA.o -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt c:/mingw/bin/../lib/gcc/mingw32/6.3.0/crtend.o COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=i586' 単純なhelloworldはきちんと出力されました。ついでに追記3.)のプログラムを ``` Vector<int> G; ``` 及び関連する(Gを用いる)部分をすべてコメントアウトして実行した結果、ちゃんと入力待ちの状態になり、結果も出力されました。vectorを使えてないのでソートは行われない状態でですが...
asm

2018/04/16 07:27

あ、わかった 例外/スレッドモデルがgit bashとMinGWで違うんだ -static オプションつけてください
metamorphosis

2018/04/16 07:54

-static を付けたところ無事出力されました! 親切に回答して頂きとても助かりました、ありがとうございました。 なるべくgit bashで作業したいので、-staticオプションを今後も使っていきたいと思います。
guest

0

現象再現しました。
printfするときの出力バッファが即時に出力してくれていないことが原因でしょうかね。
どちらかと言うとMinGWのlibcの特性のような気がします。
std::vectorは本件には無関係と思います。
asmさんが仰るようにsetvbufする方法もありますし、以下のようにfflushする方法もあります。

C++

1 printf("hello world\n"); 2 fflush(stdout);

投稿2018/04/16 06:41

編集2018/04/16 06:43
kazto

総合スコア7196

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

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

metamorphosis

2018/04/16 06:50

今fflush(stdout)とsetvbufを両方試したのですが、何も出力されないままでした...
kazto

2018/04/16 06:59

おや。。。 ソースコード自体はコピペしたまんまでコンパイルでき、当方でも動作しました。 (HelloWorldの文字列自体は、数字を入力後に出力されましたが。) コンパイルに失敗しているということは無さそうに思いますが、はて。。。 どう切り分けしましょうかね。。。
metamorphosis

2018/04/16 07:03

困りました。。。 asmさんの回答のところにも書いたのですが、追記3.)のプログラムのvectorに関する部分をすべてコメントアウトして実行してみたところ、問題なくscanfの入力待ちの状態になり、キーボードから入力を与えるときちんと出力されました。
guest

0

ん???
私もMinGW (g++) ですが、普通にstd::vector使えますよ?
もしかすると kaztoさんがおっしゃっているように、「使い方」が間違っている可能性もありますね。
情報は適切に提示しましょう。

投稿2018/04/16 06:02

BeatStar

総合スコア4958

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

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

metamorphosis

2018/04/16 06:30

反応ありがとうございます。現時点で思いつく限りの情報を問題文に追記させていただきました。何か間違っている箇所、不足している情報等があれば教えていただきたいです。よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問