「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++

関連項目