「gxx personality v0 に対する定義されていない参照です」の版間の差分
提供: C言語入門
(ページの作成:「gccコンパイラでプログラムをコンパイルしているときに、「`__gxx_personality_v0' に対する定義されていない参照です」という...」) |
|||
行1: | 行1: | ||
− | [[gcc]]コンパイラでプログラムをコンパイルしているときに、「`__gxx_personality_v0' に対する定義されていない参照です」というエラーに遭遇した時の対処方法を紹介します。 | + | [[gcc]]コンパイラでプログラムをコンパイルしているときに、「`'''__gxx_personality_v0'''' に対する定義されていない参照です」というエラーに遭遇した時の対処方法を紹介します。 |
'''読み方''' | '''読み方''' |
2016年12月25日 (日) 20:32時点における最新版
gccコンパイラでプログラムをコンパイルしているときに、「`__gxx_personality_v0' に対する定義されていない参照です」というエラーに遭遇した時の対処方法を紹介します。
読み方
- gcc
- じーしーしー
- __gxx_personality_v0
- じーえっくすえっくす ぱーそなりてぃ ぶいぜろ
概要
この記事では、以下のエラーメッセーを想定しています。
`__gxx_personality_v0' に対する定義されていない参照です `__gxx_personality_v0' に対する定義されていない参照がさらに続いています
英語表記だと、おそらく、以下のメッセージでしょう。
Undefined Symbol ___gxx_personality_v0 on link
解決方法
せっかちな方向けに、解決方法だけ、説明します。
C++の標準ライブラリ(stdc++)をコンパイルオプションで指定してください。
-lstdc++
これだけで、問題は解決できます。
何が問題なのか?
エラーメッセージの __gxx_personality_v0 から分かる通り、 gxx つまり g++ 系のエラーです。g++ とは、 C++ コンパイラです。 C++ としてコンパイルしているけど、 C++ ランタイムライブラリの stdc++ がリンクされていないのが原因として、起こされるエラーです。
gcc はデフォルトでは、 stdc++ をリンクしません。 だから -lstdc++ をリンクコマンドに指定する必要がでてくるわけです。
解決策
gccのコマンドライン・オプションで指定する方法は、以下の通りです。
gcc -lstdc++ ...
make を利用している場合には、make の コマンドライン・オプションで対応することもできます。 たとえば、以下の指定の方法があります。うまくいかない場合は、いろいろな指定方法を試してみて下さい。
gcc を使わずに、素直に g++ (c++) コマンドを利用したほうが良いのかもしれませんが、環境やプログラム、プロジェクトによるので、状況に合わせた対応方法をお選び下さい。
make LDFLAGS=-lstdc++