eyecatch thumbnail

MacOS で c++ プログラムが実行できないのは depot_tools が原因かも

Profile picture
Takeru Yamada
2020.12.06

Contents


はじめに

c++ プログラムをコンパイルして実行しようとしたら想定外のエラーが出て困惑している人向けの記事です.

次のようなエラーメッセージが出力されていて途方にくれていませんか?

$ ./hello
zsh: permission denied: ./hello

$ ./hello
zsh: exec format error: ./hello

その原因,もしかしたら depot_tools にパスが通っていることが原因かもしれません.

本記事では,このような問題に対する解決方法を提示します.

お困りの方,発狂せずにこの記事を読んでください.

さぁ,深呼吸,深呼吸.


エラーメッセージは permission denied もしくは exec format error ですか

たぶん,いつものように何気なく g++ コマンド叩いて c++ プログラムをコンパイルしましたよね?

$ g++ -g -o hello -c hello.cc

コンパイルしたから実行しよー,と思って実行可能ファイルを実行したら, まさかの permission denied ってエラーメッセージ出てびっくりしましたよね?

$ ./hello
zsh: permission denied: ./hello

権限ないから権限与えるかー,と思って $ chmod 755 hello で実行権限与えた後に実行したら, まさかの exec format error ってなってびっくりしましたよね?

$ chmod 755 hello

$ ./hello
zsh: exec format error: ./hello

exec format error の原因ですが,もしかしたら depot_tools が悪さをしてるかもしれません.

depot_tools へのパスを削除すると期待動作するかも

筆者の場合ですが,$PATH 環境変数に含まれている /path/to/depot_tools を削除すると期待動作しました.

depot_tools のどこがどういう風に想定外の悪さをしていたのか,そこまでは調べていません.

筆者の MacMini と Macbook Air のどちらも depot_tools へのパスを削除したら, 期待動作したので depot_tools が悪さをしていたのは確実なのですが.

まぁ,原因の本当の理由が分からなくても depot_tools が悪さをしていることは確実なので, vscode とか vi で $HOME/.zshrc を編集して depot_tools へのパスを削除して, source コマンド実行すれば ok です.

depot_tools へのパスの有効化は direnv などを使って, 使うときだけ有効にした方が今回のような想定外の問題に直面しなくなって良いと思います.

$ code $HOME/.zshrc

$ source $HOME/.zshrc

その後に,g++ でコンパイルしてあげれば,普段通り実行できるようになりますよ!

$ g++ -g -o hello -c hello.cc

$ ./hello
Hello, world

おわりに

MacOS で c++ プログラムを実行しようとしたら想定外のエラーが出て途方にくれたが, depot_tools へのパスを削除したら期待動作するようになったお話でした.

参考になった,面白かった,など思っていただけたら嬉しいです.

最後までお読みいただきありがとうございました.

応援していただけるととても嬉しいです!


愛用品


関連記事