Gccエラー:gcc: 'cc1'を実行しようとしてエラー:execvp:そのようなファイルまたはディレクトリはありません


102

Linux Mint 12でgccを正常に使用しています。現在、エラーが発生しています。私は最近、いくつかの.soビルドを実行してClangをインストールしましたが、これらの両方のイベント以来正常にコンパイルされているため、何が変更されたのかわかりません。GUIソフトウェアマネージャーを使用してgccを削除してから再度インストールしましたが、結果は同じです。

~/code/c/ut: which gcc                                                                                                     
/usr/bin/gcc

~/code/c/ut: gcc -std=c99 -Wall -Wextra -g -c object.c                                                                      
gcc: error trying to exec 'cc1': execvp: No such file or directory

回答:


68

説明

エラーメッセージには、ビルド時の依存関係(この場合はcc1)が見つからなかったため、必要なのは、システムに適切なパッケージをインストールする(ソースから//別の方法でパッケージマネージャーを使用)です。

とはcc1

cc1前処理されたC言語ファイルを取得し、それらをアセンブリに変換する内部コマンドです。これは、Cをコンパイルする実際の部分です。C++の場合、cc1plusや、さまざまな言語用の他の内部コマンドがあります。

Alan Shutkoによるこの回答からの引用

ソリューション:Ubuntu / Linux Mint

sudo apt-get update
sudo apt-get install --reinstall build-essential

ソリューション:Docker-alpine環境

docker-alpine環境の場合は、次のコードを追加してbuild-baseパッケージをインストールしますDockerfile

RUN apk add build-base

Pablo Castellanoによって提供されるより良いパッケージ名。詳細はこちら

ビルドの目的でさらにパッケージが必要な場合は、alpine-sdkパッケージの追加を検討してください:

RUN apk add alpine-sdk

githubから取得

ソリューション:CentOS / Fedora

この回答には、CentOSおよびFedora Linuxの手順が含まれています

ソリューション:Amazon Linux

sudo yum install gcc72-c++

撮影このコメントによってCoderChris

あなたはこれによって逃した依存関係をインストールしようとすることもできます(しかし、それは問題を解決しないと言われています):

sudo yum install gcc-c++.noarch

この答えから取られた



63

debian / ubuntuでは、この問題を再インストールして修正しましたbuild-essential

sudo apt-get update
sudo apt-get install --reinstall build-essential

1
「--reinstall build-essential」のログで、私のubuntuは「g ++のセットアップ(4:6.1.1-1ubuntu2)... update-alternatives:/ usr / bin / g ++を使用して/ usr / binを提供することを明確に述べています。 / c ++(c ++)in auto mode "
Paamand

これにより、Debian DigitalOcean.comドロップレットが修正されました。ただし、表示されている2番目のコマンドを実行するだけで、その後、.cppファイルで完全にコンパイルされたgccを実行できました。
raddevus 2017

1
@mchid何も問題はありません-問題は修正されました。問題に関連する提案のどの部分を明確にしたかっただけです。たとえば、あなたの答えが誰かにとってうまくいかなかった場合、彼らはgccに固有のupdate-alternativeを使用できます。
Paamand 2017

26

これは、gccが他の多くの実行可能ファイルを呼び出して入力の処理を完了cc1し、インクルードパスに含まれていないためです。

シェルタイプwhereis cc1cc1が見つかった場合は、のディレクトリにソフトリンクを作成することをお勧めしgccます。それ以外の場合cc1はインストールされず、パッケージマネージャーを使用してgcc-c ++をインストールする必要があります。


2
返信いただきありがとうございます。whereis cc1は何も返しません。ソフトウェアマネージャーに従って、gccおよびgcc-4.4、gcc-4-6、libgcc1をインストールしました。g ++をインストールしただけですが、まだエラーが発生します。
スクーター

2
参照実行可能ファイルは、現在では/ usr / local / libexecに/ gccを/ <アーキテクチャ> / <コンパイラ> / <compiler_version> / CC1そうでない場合は、一時的な使用のためのナビゲートには/ usr / binにはあるとしてリンクを作成する場合ln -s cc cc1
perilbrain

/ usr / local / libexecディレクトリがありません。/ usr / localの下に「gcc」はありません。
スクーター

1
GCCは/ usr / binの下にあり、そこでccを実行して、このディレクトリで前のコメントに記載されているコマンドを実行します。
ペリルブレーン

2
cc1 / cc1plusバイナリは、$ PATHにあると想定されていません。
zwol 2017年

16

Amazon Linux:GCCの問題の修正

これがGoogleでの最初の結果として出てきたので、Amazon Linuxでの経験を文書化したかっただけです。インストールgcc-c++.noarchは問題を修正しました:

sudo yum install gcc-c++.noarch

一部の人々はまた、この代替案を解決策として報告しました:

sudo yum install gcc72-c++


2
間違いなく、amazon linuxでの私の問題は、悲しいかな、.noarchすでにインストールされています。
ragerdl 2018年

10
sudoのyumをgcc72-Cをインストール++ AmazonでLinux上で私のためにそれをソート
CoderChris

Amazon Linuxについて誰かが話してくれてうれしいのですが、これらのソリューションのどちらも私にはうまく
John Chrysostom '22

1
「Amazon Linux AMI 2018.03」では、yum install gcc72-c ++も必要です。
Nick Lothian 2018

1
sudo yum install gcc72-c ++が動作します。どうもありがとう
Ilyas

13

今日、同様の問題に遭遇しました-同僚は彼のソフトウェアを構築できませんでしたが、私はそれを構築することができました。彼が走っgccたとき、それは見つかりませんcc1でした。

彼の実行可能なパスは妥当に見えましたが、失敗を簡単に再現できなかったという事実が原因として彼の環境に何かを示唆していました。

最終的GCC_EXEC_PREFIXに、犯人でありgcc、の検索で誤解を招くような、彼の環境で定義されたことがわかりましたcc1。これは彼のシェル起動スクリプトの一部であり、使用されなくなったSPARC / Solarisシステムの制限を回避するためのものでした。この環境変数を設定しないことで問題は解決しました。

http://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html


まったく同じ問題..まだ解決されていません!これは、プロジェクトを16.04LTSから18.04LTSに移植した後に発生しました。
Shaze

11

明示的にg ++をインストールして、この問題を修正しました。

sudo apt-get install g++

パンダのインストール中にUbuntu 12.04で問題が発生しました。(perilbrainに感謝します。)


5

yum install gcc-c++ 修正を行いました。


1
既存の回答の複製(現在、最も高い投票数で、この回答の1年前に投稿されました)。「ありがとう」または「私も」という答えは、混乱するだけです。
Peter Cordes

4

がエクスポートされGCC_EXEC_PREFIX(env)ておらずPATH、正しいツールチェーンにエクスポートされていることを確認してください。


2

RHEL 7に光沢のある新しいGCC —バージョン8.1 —をコンパイルしてインストールした直後に、これを経験しました。結局、アクセス許可の問題が発生しました。私のルートumaskが原因でした。私は最終的にcc1隠れていることを発見しました/usr/local/libexec

[root@nacelle gdb-8.1]# ls -l /usr/local/libexec/gcc/x86_64-pc-linux-gnu/8.1.0/ | grep cc1
-rwxr-xr-x 1 root root 196481344 Jul  2 13:53 cc1

ただし、そこにつながるディレクトリのアクセス許可では、私の標準ユーザーアカウントは許可されませんでした。

[root@nacelle gdb-8.1]# ls -l /usr/local/libexec/
total 4
drwxr-x--- 3 root root 4096 Jul  2 13:53 gcc
[root@nacelle gdb-8.1]# ls -l /usr/local/libexec/gcc/
total 4
drwxr-x--- 3 root root 4096 Jul  2 13:53 x86_64-pc-linux-gnu
[root@nacelle gdb-8.1]# ls -l /usr/local/libexec/gcc/x86_64-pc-linux-gnu/
total 4
drwxr-x--- 4 root root 4096 Jul  2 13:53 8.1.0

chmod世界の読み取り/実行権限を追加するための迅速な再帰により、すぐに修正されました。

[root@nacelle 8.1.0]# cd /usr/local/libexec
[root@nacelle lib]# ls -l | grep gcc
drwxr-x---  3 root root     4096 Jul  2 13:53 gcc
[root@nacelle lib]# chmod -R o+rx gcc
[root@nacelle lib]# ls -l | grep gcc
drwxr-xr-x  3 root root     4096 Jul  2 13:53 gcc

そして今、私が何かをコンパイルするように頼んだときにgcc見つけることができますcc1


1

これは、64ビットOSで32ビットのgccバイナリを実行しようとして、32ビットのglibcがない場合にも、表示されるエラーメッセージである可能性があります。このReadmeによると、「64ビットシステムの場合、ツールを実行するには32ビットのlibcとlibncursesが必要です。」この場合、パスに問題はなく、実際にはcc1が見つかりますが、32ビットglibcがないため、欠落ている報告されます。


1

私にとって助けとなったのは、llvm-gcc代わりに使用することでした:

ln -s $(which llvm-gcc) /usr/local/bin/gcc

1

他の回答の具体的な例のように見えても、この問題に関する私の問題を文書化するだけです。比較的初心者なので、他の人の役に立つかもしれないと感じています。

解決:

使用する単一セッションのPATHの先頭に「/ usr / bin」を追加するPATH='/usr/path/:$PATH'と、すべてが正常に動作し始めました。

通常のツールチェーンが壊れないことを確認した後、geditを使用してPATHを永続的に更新しました。

説明:

Ubuntu 14.04LTSに複数のツールチェーンがインストールされており、定期的にいくつか使用しています。コマンドラインからgccを使用しようとすると、OPで説明されている問題が発生しました。'/ usr / bin'はPATHにありますが、他のツールチェーンの場所の背後にあります。他のツールチェーンのcc1はgccと互換性がないことが判明しました。


1

アルパインに関する@maxkoryukovの回答を補足するために。

build-essentialアルパインのDebianに相当するものはbuild-baseです。実際、上記はにalpine-sdk依存しbuild-baseます。

/ # apk info -R build-base
build-base-0.5-r1 depends on:
binutils
file
gcc
g++
make
libc-dev
fortify-headers

/ # apk info -R alpine-sdk
alpine-sdk-1.0-r0 depends on:
abuild
build-base
git


0

私はFedora 27のかなり新しいインストールでこの問題を経験しました。他のすべての提案または同等のものを試しました。さまざまなパッケージをインストールすると、「すでにインストール済み」と表示されるか、役に立たない新しい何かがインストールされます。

で修正

# dnf remove gcc
# dnf install gcc gcc-c++

0

Scientific Linux 6(CentOS 6と同様、SLはCentOS、AIUIに置き換えられました)では、https://stelfox.net/blog/2014/08/dependency-prelink-issues/で/usr/sbin/prelink -av -mR提案されているものを使用する必要がありました

それを行うまで、gcc: error trying to exec 'cc1': execvp: No such file or directoryコンパイルしようとするとcc1エラーが発生し、gum --versionは、yumから報告されたバージョンにもかかわらず、4.4.7ではなく4.2.2を報告しました。

関連しているかどうかは関係ありませんが、システムは/ varのスペースを使い果たしました


0

このパッケージに含まれています(Ubuntu 19.04):

  sudo apt install g++-6

古いG ++バージョンをインストールする必要はありません。ただg++大丈夫です。それ以上に、build-essentialいくつかのライブラリーも取り込みます。
Peter Cordes

0

私のまれなケースではそれはcolor wrapper台無しにした人でしたgcc。環境変数からcwディレクトリを除外することを無効にすることで解決しました。/usr/libexec/cwPATH


0

なぜこれが起こるのですか?linuxの新しいコピーをインストールすると、gccコンパイラーがあらかじめパックされています。これには、Linuxの実行に使用されるファイルとバイナリのみが含まれます(スペースと時間を節約するためです)。

このエラーを解決するには?必要なのは、パッケージマネージャーを使用してパッケージを更新し、ビルドに不可欠なパッケージを再インストールすることだけです。カーネルによってコマンドは異なる場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.