(しばらく工事中)
Apple Silicon を搭載した Mac で
% cat test.cpp #include <iostream> int main(void) { std::cout << "Hello" << std::endl; return 0; } % c++ test.cpp % ./a.out Hello何気ないプログラム。当然(macOS 純正の c++ で) 動く。ところが % which g++ /opt/local/bin/g++ % g++ test.cppMacPorts でインストールした g++ では怒涛のエラーが出力される。 エラーのほとんどが SDKs/MacOSX.sdk/usr/include/mach/arm/_structs.h:633:26: error: '_Alignof' was not declared in this scope |
このことは認識されているようだが、 簡単に直らないのだか、 しばらく静観様子見状態(もう1ヶ月以上?)になっているみたい。
まあ今のところ macOS 純正の c++ でしのげるので、何とかなっているのだけど、 困った。 Homebrew の方は大丈夫というか、対処したようなんだけど (https://github.com/Homebrew/homebrew-core/issues/219174)。
対症療法として、各 C++ プログラムの中に次を書いておくこと。
#define _Alignof alignof |
alias g++='g++ -D_Alignof=alignof' |
ここら辺で、猫の手でも借りたいときの (ちょっと違うな) ChatGPT 頼み。 ああやってみて、こうやってみて、に従っておりた診断が、
もし原因が本当にそれならば、次で直るはず… というのに小一時間つきあったけれど、解決せず。 give up することに。
どういうエラーが出てもへこたれずに何か提案してくるのには感心するけれど、 エラーログもきちんと読めないし(エラーはおこってませんとか言うので、 第x行のこれはエラーじゃないんですか?そうですね。深くお詫びします、 とか)。
それにしても、GCC は重要だと思うのだけど、 MacPorts にはちゃんとメンテナンスする人がいないのだろうか? (Homebrew に鞍替えしようかしら) それとも Apple Silicon 用の SDK って、本当に対処しにくい相手なのか。
(2025/5/22晩) https://trac.macports.org/ticket/72512
少し動きがあったようだけど…
(2025/5/30) Xcode と Command Line Tools for Xcode の Upgrade が来た (前者は 16.4, 後者は 15.5)。 upgrade したら、g++ のエラーが出ないようになった。 MacPorts の gcc14 の更新はまだ来ていないが、 これで alias g++='g++ -D_Alignof=alignof' とはさようなら。 とりあえず解決、でいいのかな。
(とりあえず、Command Line Tools ... の方だけでも更新すると、 /Library/Developer/CommandLineTools/SDKs/ に、 MacOSX15.5.sdk というディレクトリィが出来て、 /Library/Developer/CommandLineTools/SDKs/MacOSX15.sdk がそれへのシンボリック・リンクになる。その状態で g++ のエラーがでなくなる。 Xcode 自体は必ずしも更新する必要はないみたい。まあ、更新するけど。)
ネットでこの問題について議論している中に、 これは本来 Xcode の問題である、 あわてて対処するのはどうか、みたいなことを言う人がいたけれど、 それが正しかったのかしら。 GCC も 14.3 とか出たようだし、そのうち gcc14 もそれに置き換わるのか。
色々検索していて、GCC version 15 がリリースされた話も出ていた。 MacPorts にも近いうちに gcc15 が来るのか。 (C++でなく) C に体も割と大きな変更があるようで、 また「○○がコンパイル出来なくなった!」とか起こるのかな。 C++ とは違って、Cについては、満を持して、というところがあるので、 しっかり迎えようと思っている。