私は数年の間、JavaのためにEclipseを使用していて、CDTをインストールしてCを学習することにしました。MinGW
とCygwin
の両方をインストールしましたCDTは、新しいプロジェクトを作成するときにそれらを検出して使用しようとします。
File > New C++ Project
を選択し、Hello World C++ Project
とCygwinGCC
ツールチェーンを選択します。プロジェクトに「asdf」という名前を付け、ツールバーの「Build Debug」をクリックします。コンパイラはエラーなしで完了します。 Runを押しても何も起こりません。
プロジェクトディレクトリを手動で参照し、asdf.exeを実行すると、次のエラーが表示されます。"The program can't start because cygwin1.dll is missing from your computer. Try reinstalling the program to fix this problem."
MinGWを使用しても同じことが起こりますが、異なるdllだけが欠落しています。
使用可能な.exeを作成するには何をする必要がありますか?
(Windows 7 x64、EclipseおよびCDTの最新バージョンを実行しています。)
編集:コンパイラの出力は次のとおりです。
**** Build of configuration Debug for project asdf ****
make all
Building file: ../src/asdf.cpp
Invoking: Cygwin C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/asdf.d" -MT"src/asdf.d" -o"src/asdf.o" "../src/asdf.cpp"
cygwin warning:
MS-DOS style path detected: C:\Users\Shawn\Dropbox\Eclipse\asdf\Debug
Preferred POSIX equivalent is: /cygdrive/c/Users/Shawn/Dropbox/Eclipse/asdf/Debug
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Finished building: ../src/asdf.cpp
Building target: asdf.exe
Invoking: Cygwin C++ Linker
g++ -o"asdf.exe" ./src/asdf.o
Finished building target: asdf.exe
このエラーメッセージは、Windowsが「cygwin1.dll」を見つけることができないことを意味します。 Cygwin gccが作成するプログラムは、このDLLに依存しています。ファイルはcygwinの一部であるため、ほとんどの場合、C:\ cygwin\binにあります。問題を解決するには、C:\ cygwin\bin(またはcygwin1.dllが見つかる場所)をシステムパスに追加するだけです。または、cygwin1.dllをWindowsディレクトリにコピーできます。
DependencyWalkerという素敵なツールがあり、 http://www.dependencywalker.com 。これを使用して実行可能ファイルの依存関係を確認できるため、生成されたプログラムを検査すると、欠落している依存関係と解決された依存関係がわかります。
Cygwinのg++
またはMinGWを使用してコンパイルできます(スタンドアロンまたはCygwinパッケージを使用)。ただし、実行するには、cygwinスタイルのパスの前に、Cygwin1.dll
(およびその他)PATHをsystem Windows PATHに追加する必要があります。
したがって、次を追加します。;C\cygwin64\bin
にWindowsのendsystemPATH
変数。
また、[〜#〜] cmd [〜#〜]またはPowerShellで使用するためにコンパイルするには、以下を使用する必要があります。
x86_64-w64-mingw32-g++.exe -static -std=c++11 prog_name.cc -o prog_name.exe
(インストールされている場合、これはクロスコンパイラを起動します。)