Necko
@Necko

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

VScode、C++の環境構築がしたい

解決したいこと

VScodeにてC++を使うための環境構築をしています。
下記リンクのVScode公式>C++のページを参考にしながら実行するとこまでいきましたが、うまくいかず。どこで間違えているのかも分からない状態です。
https://code.visualstudio.com/docs/cpp/config-mingw

このエラーを解決し、問題なくコードを実行できるようにしたいです。


原因を探っていた際、システム環境変数も変にいじってしまっているのではないかと思っています、、

環境変数の「Path」をいじれば治るのではと思い、1枚目スクショの新規作成から「Path」「C:\msys64\ucrt64\bin」を作成したせいで、元々あった「Path」が消えてしまいました。
ご存じであれば元の「Path」に戻す方法もご教授いただければ幸いです。

スクリーンショット 2024-05-01 220040.png
スクリーンショット 2024-05-01 220332.png

発生している問題・エラー

preLaunchTask 'C/C++: gcc.exe アクティブなファイルのビルドが終了コード -1 で終了しました。
launch: program'C:\User\name\OneDrive\ドキュメント\vscode\c言語\hello\hello.exe' does not exist

スクリーンショット 2024-05-01 213329.png

該当するソースコード

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

    for (const string& word : msg)
    {
        cout << word << " ";
    }
    cout << endl;
}
1

5Answer

うーん、単純にC++のビルド環境がほしいのであれば、Visual Studioをお勧めしますが・・・(Communityエディションであれば無料です)

ここで紹介しているやり方って、初学者向けではないんですよね。
「プログラムは普通に組めるようになったね。それじゃあコンパイラについて知っていこうか」みたいなレベルです。

ついでに言うと、VSCodeはあくまでコードエディタです。
コンパイラと連動するのはプラグインみたいなものなので、応用編みたいな使い方なんですよね。

それでもVSCode+gcc環境をお望みであれば、他の方の回答をお待ち下さい。

1Like

preLaunchTask 'C/C++: gcc.exe アクティブなファイルのビルドが終了コード -1 で終了しました。

preLaunchTaskはLuunch(起動)前のタスク、この場合はビルドのことで、「終了コード -1 で終了しました」は「ビルドに失敗しました」という意味です。
(コマンドラインツールは正常終了なら終了コード0、それ以外の終了コードならエラーとなっているものが多い)

launch: program'C:\User\name\OneDrive\ドキュメント\vscode\c言語\hello\hello.exe' does not exist

「hello.exeが見つからなかったので起動できませんでした」という意味です。ビルドに失敗しているのだから実行ファイルがないのは当然ですね。

重要なのはターミナルに出ているメッセージの方で、

C:\msys64(略)\ld.exe: cannot open output file C:\Users\Necko\OneDrive???\vscode\c???hello.exe: No such file or directory

「ld.exeというプログラム(リンカです)からのエラーメッセージ"出力ファイル(フルパス名)をオープンできませんでした"」
ここで重要なのは出力先パス名が文字化けしていることで、通常はVSCodeなどで作成したテキストファイルの文字エンコードはUTF-8なのに、ターミナルはコマンドプロンプトやさらにそのご先祖のMS-DOSとの互換性のために文字エンコードはShift-JISです。
これに関してはターミナルでchcp 65001と入力すればUTF-8モードに切り替わります。

でもそれだけならターミナルの表示だけの問題で、エラーになる理由ではないかもしれません。
MinGWは外国製なので、日本語文字を正しく扱えない可能性があります。
これに関してはソースファイルの置き場所やビルドした実行ファイルの出力先のフルパスがすべてASCII文字(ざっくり言えば半角英数字)にする必要があるかもしれません。

もう一つ気になるのは出力先がOneDriveのフォルダになっているらしいことで、ひょっとするとMinGWのツールではOneDriveのフォルダを扱えなかったりするのかもしれません。

Path環境変数については、Windowsのバージョンによって違うものなので使用環境を書いてくれないとわかりません。
ただ少なくともエラーメッセージを見る限りでは、今の時点でエラーとなっている原因は「指定したパスに実行ファイルを出力できない」であり、Pathは関係なさそうです。

0Like

C++系は詳しいわけではありませんが

chcpでCP65001に変更されてる上、マルチバイト(日本語)の混ざったフォルダで文字化けが発生し、それが原因で相当ファイルを見つけられてないのが原因かもしれません。

基本こういったフィルやフォルダにマルチバイトを含めると事故が発生しますので使わないのがベストです。

元の「Path」に戻す方法

基本元には戻せません。
可能性として「システム復元」で回復はできそうです。
「ユーザー環境変数 復元」でググればいくつか見つかるかもしれません。

0Like

他の方が書かれているように、日本語が入ったフォルダ名(ドキュメントやc言語)のために、gccがソースファイルを見つけられていないような気がしますので、ソースファイルを置くフォルダを変えるだけで解決しませんか?
あとは、どうしてもVSCodeを使ってC++を勉強したいということなら、VSCode+CodeRunner+MSVCコンパイラの組み合わせで使うという手もあります。こちらなら日本語を含めたマルチバイトなフォルダ名でもコンパイル+リンク可能です。ただし、コンパイラ使うためにVisualStudioはインストールしないといけませんが…。

0Like

次の2つの対応で上手くいと思います。

・OneDriveのパスを直接使うことはできないので、ネットワークドライブを割り当て、そのドライブ上のパスを使う。

・コンパイラは、gcc ではなく、g++ を使う。

0Like

Your answer might help someone💌