MinGWのコンパイル方法(初心者)

このQ&Aのポイント
  • MinGWを使用した初心者向けのコンパイル方法について解説します。
  • Hello world(C++)をMinGWでコンソール上で実行する方法について説明します。
  • コンパイル時に発生するエラーについて、解決方法をご紹介します。
回答を見る
  • ベストアンサー

MinGWのコンパイル方法(初心者)

Hello world(C++)を コンソールで >>path=C:\MinGW\bin;%PATH% >>g++ hello.cpp -o hello >>hello.exe これは、実行できます。 しかし、Hello.exe をマウスでクリックするとERRORとなります。どうすればいいのでしょうか? 以下、ERRORです。 libgcc s dw2-1.dll が見つからなかったため、このアプリケーションを開始できませんでした。 アプリケーションをインストールし直すとこの問題は解決される場合があります。 インストールし直しましたが解決しませんでした。 これは、どうもパスを通してない時と、同じERRORなので、あやしいのは、コンパイル時の リンクとかパスだと勝手に考えています。 ご教授よろしくおねがいします。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

普通は DLLを一箇所に登録しておいて使うようにします そうしないと 色々なバージョンのDLLでハードディスクを占領してしまうことにもなりますので また 意図しないバージョンを読み込んで 不具合が生じるなどの弊害もあります 開発したソフトを別のハード(PC)で動作させるには 補足されたようにlibgcc_s_dw2-1.dll をどこかに登録する必要があります 使うライブラリ(関数など)によっては別のDLLも必要になる可能性もあります これが 実行環境で標準に搭載されているものならばいいのですが 今回のように別途必要になるのであればこれを所定の位置にインストールするといった作業が必要になります 現行に Windows XP/Vista/7 などは DLL関係を C:\Widnows\System32 に入れる場合が多いようです MinGW自体は使ってないので どのような配布方法が可能なのか存じません あと WindowsのEXEは起動時に必要なDLLを探す手順も決まっています この中の1つに 環境変数の Pathの設定にしたがって探すといった工程があります 先の回答は この手順を実行できるようにする手助けです

sutoroma
質問者

お礼

何度もご回答ありがとうございます。 やはり、インストールしないといけないんですね。。。 詳しく書いてくれて勉強になりました。 ありがとう。

その他の回答 (3)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

Windowsの環境変数のPathに C:\MinGW\Bin が設定されていないだけなのでは ・・・ 単純にコマンドプロンプト(Windowsの標準の方ですが)を起動して Hello.exeがあるディレクトリをカレントにしてから Hello[Enter]とした場合はどうなんでしょう? 同じ症状なら マイコンピュータのプロパティを表示 詳細設定タブ > 下部にある『環境変数』をクリック 上部のユーザー用か下部のシステム用の path設定の冒頭に 『C:\MinGW\Bin;』を追加してみましょう

sutoroma
質問者

お礼

ご回答ありがとうございます。 上記の方法で、一応、libgcc_s_dw2-1.dllはいらなくなりました。ありがとうございます。 なのですが、他のPCで実行するには、libgcc_s_dw2-1.dllがいりますよね? これは、そういうものなんですか? 初歩的な質問ですみません。。。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

Windows vista SP2 MinGW gcc 4.5.1では再現しませんでした。 C:\MinGW\binにg++.exeがあるかどうか確認してみてください。

sutoroma
質問者

お礼

ご回答ありがとうございます。 確認、までしてくださってありがとうございます。 >>C:\MinGW\binにg++.exeがあるかどうか確認してみてください。 g++ありました。 環境は、WindowsXP SP3 mingw-get-inst-20101030 バージョンは、わからないので、ファイル名を乗せときます。

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

Dwarf2 の機能を使っている時に起きる現象の様です。 Dwarf2 を使用している場合には「libgcc_s_dw2-1.dll」がPATHの通っている ディレクトリまたは、実行時のディレクトリにある必要があるみたい。 「libgcc_s_dw2-1.dll」はMinGWのbinディレクトリにあると思います。

sutoroma
質問者

お礼

ご回答ありがとうございます。 ディレクトリにlibgcc_s_dw2-1.dll を置きマウスをクリックすると正常に動作しました。 助かります。

関連するQ&A

  • MingwでC++のソースがコンパイルできない。

    質問があるのですがよろしくお願いしします。 プラットフォームは Windows HOME です。 MinGWでC++のhelloworld.cppという名前のプログラム ------ここから----------- #include <iostream> using namespace std; int main(){ cout <<"Hello World!!\n"; return 0; } -------ここまで----------- を、gcc helloworld.cpp とWindowsのコマンドプロンプトから打ってコンパイルしようとしたのですが、 undefined reference to std string::size() const undefined reference to std string::operator[](using int) const undefinrd reference to std::cout undefinrd reference to std::basic_ostream<char, std::char traits<char> >&, char const*) undefinrd reference to std::ios_base::Init::() undefinrd reference to std::ios_base::~Init::() などのエラーが出て、コンパイルできません・・ hello.cという名前のC言語プログラム --------ここから------ #include<stdio.h> int main(void){ printf("Hello GCC World on Windows!!\n"); } ------ここまで------- は、gcc hello.c で正常にコンパイルでき、生成したexeファイルも正常に動きます。 また、eclipse CDT上からc++プログラムをMinGWでコンパイルすることもできるのですが・・ なぜかWindowsのコマンドプロンプトからc++プログラムをコンパイルしようとするとエラーが出てしまいます。(C言語のプログラムでもエラーが出ることが時々あります。) どなたか詳しい方いらっしゃいましたらご教授頂けると幸いです。 よろしくお願いします。

  • FFTWでコンパイルができません。

    FFTWでコンパイルができません。 http://www32.atwiki.jp/amaeda/pages/12.html ↑のソースファイルをコンパイルすると以下のエラーが出ます。↓ >gcc -o fftw1D fftw1D.c -lfftw3 -lm (MinGW) c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe: cannot find -lfftw3 collect2: ld returned 1 exit status FFTWはわからないので、教えてください。

  • gccのコンパイルが出来ません

    gcc(MinGW)をインストールをして、binにPATHを通したのですが、コンパイルしてみると gcc: installation problem, cannot exec `cc1plus': No such file or directory というエラー文がでました。 解決方法をどなたか教えて下さい;; OS は XP Professional SP2 です。 http://www.knatech.info/Dev-mingw-install.htmlを参考にしました。

  • MinGWのg++で分割コンパイルエラー

    MinGW環境でC++の勉強を始めました。 簡単なサンプルのコンパイルをしてみたのですが、ソースファイルを一括してコンパイルすると問題ないのですが、個別にコンパイルしようとするとエラーがでてしまいまいます。 原因や対処法をご存じの方がいらっしゃいましたらご教示下さい。 一括でコンパイルすると問題なし bash-3.1$ g++ -Wl,--enable-auto-import main.cpp point.cpp -lstdc++ 個別にコンパイルしようとした場合 bash-3.1$ g++ -Wl,--enable-auto-import -o main.o main.cpp C:\DOCUME~1\user\LOCALS~1\Temp\ccZrVmLp.o:main.cpp:(.text+0x16): undefined reference to `Point::Point()' C:\DOCUME~1\user\LOCALS~1\Temp\ccZrVmLp.o:main.cpp:(.text+0x32): undefined reference to `Point::Point(int, int)' C:\DOCUME~1\user\LOCALS~1\Temp\ccZrVmLp.o:main.cpp:(.text+0x3e): undefined reference to `Point::println()' C:\DOCUME~1\user\LOCALS~1\Temp\ccZrVmLp.o:main.cpp:(.text+0x4a): undefined reference to `Point::println()' collect2: ld returned 1 exit status ※ -Wl,--enable-auto-importは、他の警告を消すために入れました、無くても質問の問題に変化はありませんでした。 サンプルソース ---main.cpp--- #include<iostream> #include "point.h" using namespace std; int main(){ Point p1,p2(4,5); p1.println(); p2.println(); return 0; } ----------- ---point.h--- class Point { private: int x, y; static int count; public: Point(); Point( int, int ); void set( int, int ); void println(); }; ------------- ---point.cpp--- #include<iostream> #include"point.h" using namespace std; int Point::count; Point::Point(){ this->x = this->y = 0; ++count; } Point::Point(int ax, int ay){ this->x = ax; this->y = ay; ++count; } void Point::set( int ax, int ay ){ this->x = ax; this->y = ay; } void Point::println(){ cout << "Point(" << x << "," << y << ")" << endl; } ----------- bash-3.1$ g++ -v Using built-in specs. COLLECT_GCC=D:\MinGW\bin\g++.exe COLLECT_LTO_WRAPPER=d:/mingw/bin/../libexec/gcc/mingw32/4.5.0/lto-wrapper.exe Target: mingw32 Configured with: ../gcc-4.5.0/configure --enable-languages=c,c++,ada,fortran,obj c,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgo mp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-r untime-libs --disable-werror --build=mingw32 --pref

  • MinGWのgccでOpenMPを使う方法

    MinGWのgccでOpenMPを使いたいのですが、サンプルソースコードを以下のようにコンパイルするところでエラーとなります。 gcc -fopenmp -O2 abc.c その結果が以下のようです。 ld.exe: cannot find -lpthread pthreadがみつからないのですが、あるけど見つからないのではなく、もともとない、が正解のようです。MinGWをインストールする際、ものすごく多くのファイル選択の可能性があり、デフォルトでやると欠落してしまうんだと思います。インストールのセレクトの仕方を教えて頂ければと思います。検討がつかないぐらいセレクションのリストが長々としているので。あるいは別の解決方法でも。よろしくお願いします。

  • 初心者のコンパイルです。

    コマンドプロンプトを使ってコンパイルしたのですが、最後に必ず「ファイルcox32.objが開けません」と出てきます。打った内容は、 cd c:\borland\bcc55\bin dir bcc32 -ehello.exe hello.c です。特に特別なものを使っているわけでもなく、コマンドプロンプトです。

  • MinGWをXPにインストール後 DOSのipconfig など使えな

    MinGWをXPにインストール後 DOSのipconfig など使えなくなる 標記の通り、昨日MinGWというC言語の環境をインストールした。 それに応じてシステムの環境関数もいくつか追加した。下記: 1 MINGW_PATH=G:\MinGW 2 C_INCLUDE_PATH=%MINGW_PATH%\include;%MINGW_PATH%\lib\gcc\mingw32\3.4.5\include 3 CPLUS_INCLUDE_PATH=%MINGW_PATH%\include\c++\3.4.5;%MINGW_PATH%     \include\c++\3.4.5\mingw32;%MINGW_PATH%\include\c++\3.4.5backward;%C_INCLUDE_PATH% 4 LIBRARY_PATH=%MINGW_PATH%\lib;%MINGW_PATH%\lib\gcc\mingw32\3.4.5 5 PATH=%MINGW_PATH%\bin;%MINGW_PATH%\libexec\gcc\mingw32\3.4.5 そうしてから、DOSでipconfig 出来なくなるだけじゃなく、社内用のメールボクスも開けなくなる。 一体なぜか? どなたか教えていただきませんか

  • 32bitでコンパイルするには

    お世話になっております。 CentOSの64ビットマシンを使っています。 C言語の簡単なサンプルとして、ポインタ変数の長さを表示するプログラム(sizeof(ポンタ変数)をprintf)を作りました。 これをコンパイルして実行すると8と表示されますので、64bitとアプリケーションとしてコンパイルされたのだろうと思います。 次に32Bitアプリケーションとしてコンパイルするために-m32オプションを付けてコンパイルしたところ、以下のとおりエラーが出てしまい困っております。 gcc -m32 -o sample sample.c /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.4.7/libgcc_s.so when searching for -lgcc_s /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.4.7/libgcc_s.so when searching for -lgcc_s /usr/bin/ld: cannot find -lgcc_s collect2: ld returned 1 exit status 解決方法について教えていただければ幸いです。 コンパイラは、gcc-4.4.7-3.el6.x86_64をインストールしています。 よろしくお願いします。

  • WinMainのコンパイルについて

    こんにちわ。 某動画のまねをしてテトリスの作成に取り掛かっているのですが、最初から躓いてしまい困っています。 ◆現象 コンパイル時にWinMainが再宣言されているというような内容のエラーが出てしまい、コンパイルに失敗する D:\tetris>gcc -mwindows tetris.cpp tetris.cpp:18: error: `int WinMain' redeclared as different kind of symbol C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:1109: error: previous declaration of `int WinMain(HINSTANCE__*, HINSTANC E__*, CHAR*, int)' tetris.cpp:18: error: declaration of `int WinMain' C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:1109: error: conflicts with previous declaration `int WinMain(HINSTANCE_ _*, HINSTANCE__*, CHAR*, int)' tetris.cpp:18: error: `HINSTANSCE' was not declared in this scope tetris.cpp:18: error: expected primary-expression before "hPrevInst" tetris.cpp:18: error: expected primary-expression before "cmdLine" tetris.cpp:18: error: expected primary-expression before "int" tetris.cpp:18: error: initializer expression list treated as compound expression tetris.cpp:18: error: expected `,' or `;' before '{' token ◆環境 OS:Windows コンパイラ:MinGW ◆問題個所のソース int WinMain(HINSTANSCE hInst, HINSTANCE hPrevInst, LPSTR cmdLine, int cmdShow){ WinMainの宣言個所はここだけなのでエラーの意味がよくわからず、色々と調べてみましたが原因はよくわかりませんでした。 Win32APIについてはあまり詳しくないので(C++の原因かもしれませんが)解説できる方がいらっしゃったらご回答願います。

  • bcpadでコンパイルできない

    この前学校でbcpadをつかった授業があったので家でやってみようと思い、 Borland C++ Compiler 5.5 とCPad for Borland C++Compiler をインストールして設定もしました。 そしてbcpadに #include<stdio.h> int main(void){ printf("Hello World"); return 0; } と入力し、保存してコンパイルしてみました。 しかし、以下のようなエラーメッセージが出ました。 「コンパイルに失敗しました ファイル"C:Users\aaaa\downloads\Documents\C\hello.exe" は存在しません」 また下のメッセージのところには hello.cpp: Error E2379 hello.cpp 7: Statement missing ; in function main() *** 1 errors in Compile *** と出ていました。 何がダメなのか全くわかりません。 OSはwindows7です。 どなたか詳しい方ご教授をお願いします。

専門家に質問してみよう