内藤です。

> 2019/12/05 19:25、Kouichi Hirabayashi <[email protected]>のメール:
> 
> 例えば、下記の最低限のプログラム
> 
> -- a.cpp --
> #include <GL/glut.h>
> #include <iostream>
> 
> int main(int argc, char *argv[])
> {
> }
> --
> 
> を
> 
>  g++ -o a a.cpp -I/usr/local/include -L/usr/local/lib -lglut -lGLU -lm
> 
> でコンパイルすると再現できます。

 g++ -o a a.cpp -I/usr/local/include -L/usr/local/lib -lc++ -lglut -lGLU -lm

と -lc++ を真っ先にリンクしてみてください。
#あと -Wl,-rpath=/usr/local/lib/gcc9 も入れた方がよいです。

私もこの辺りの処理を詳しくは知らないのですが、
g++ のランタイムは一部が clang++ のランタイムに依存しているようです。

いつの頃からかは調べきれていませんが、
clang++ のランタイムは起動時に正しく初期化されないと動かなくなったようで、
強制的に最初にリンクしてあげると clang++ のランタイムの初期化処理が動いて
うまく行くようです。

clang++ でコンパイルすると g++ のランタイムがリンクされないため、
clang++ のランタイムが必ず初期化されるので問題ありません。

-- 
内藤 祐一郎
[email protected]

_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-users-jp
To unsubscribe, send any mail to "[email protected]"

メールによる返信