OS Project Wiki の保存版 ヒデさん・アリスさんほか、OS部のみなさんが書いたものです。
2019年にサイトが消滅しました。当時あった211ページのうち、本文が残っていたのは86ページです。すべては復旧できていません。Common Crawl と Internet Archive に 残っていたものを組み直しています(最終取得 2019-05-24)。
編集・検索・添付などの機能は動きません。表示のみです。

検索

まずは、検索!

Index

人気の20件
最新の20件
2018-12-022018-01-092017-05-072017-04-252016-05-012015-02-242014-01-032013-06-252012-12-302012-12-292012-07-272012-07-162012-02-052012-01-292011-10-012011-09-18

障害情報

目次

概要

問題に直面した時、すぐ解決できるように、障害情報を書き留めましょう。
解決できたら、その解決方法を書いておくと、みんなの役に立ちます!

オーバーライド(C++)リンクエラー

障害内容

C++において、仮想関数がうまく動かない。
リンクエラーが出る。
リンクエラーを回避しようとすると、実行時、アボートする。

エラー文
undefined reference to ...

ちょっと忘れた。。

原因

標準ライブラリの実装やリンカスクリプトが原因。

解決方法

.rodata._ZTV6parent ・・・ vtable
.rodata._ZTI6parent ・・・ type_info
.rodata._ZTS6parent ・・・ なんだっけ・・?

これらを以下のようにリンクすれば、正常に動作する。はず。

.rodata :
{
	*(.rodata)
	*(.rodata.*)
}

しかし、これでは、type_info(C++の型に関するライブラリ)が無いといわれるため、標準ライブラリを実装する必要がある。

補足

C++のライブラリを実装するのは難しいので、

.rodata :
{
	*(.rodata)
	*(.rodata._ZTV*)
}

とすれば、vtableが使用でき、オーバーライドだけなら実装できる。

現在、標準ライブラリを実装できるように、頑張っています!

リンク時に__gxx_personality_v0と出る

undefined reference to `__gxx_personality_v0'

GCC,G++でリンカスクリプトを使用してコンパイルするとundefined reference to `__gxx_personality_v0'と出てldが完了しない

リンカスクリプトに /DISCARD/ セクションを追加したらコンパイルが通った。

コンパイル時にライブラリを取り込まない設定などは分かりません


Since 2008 July. OS Project Wiki
保存 2019-04-21 ・ ページ一覧