Linux x86_64 マシンを使用してプログラムをビルドしています。共有ライブラリを実行可能ファイルにリンクしました。私のプロジェクトでは、関数vector<string>
内で宣言された関数を呼び出しています。その関数が呼び出されると、私のプログラムは強制終了されます。以下のGDBを介してデバッグすると、出力が得られます。
Program received signal SIGILL, Illegal instruction.
0x00002aaaac4d2be7 in OC_Catalog_c::File_ToText (this=0x611aa0) at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:87
87 : _Tp_alloc_type(__a), _M_start(0), _M_finish(0), _M_end_of_storage(0)
(gdb) bt
0 0x00002aaaac4d2be7 in OC_Catalog_c::File_ToText (this=0x611aa0) at /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_vector.h:87
これは私の共有ライブラリのコンパイルの問題ですか?? それに十分に頭をぶつけた。助けてください。
-チャク
クエリの追加情報: はい、File_ToText を呼び出している関数は、クラス OC_Catalog_c の仮想関数です。他のクラスのメンバー変数には、仮想関数 File_ToText を持つクラス OC_Catalog_c のオブジェクトがあります。そのオブジェクトを使用して、仮想関数 File_ToText から OC_Catlog_c の File_ToText 関数を呼び出しています。コード スニペットを示します。
class Oc_Catalog_c
{
virtual vector<string> File_ToText (void) const;
}
class B
{
const OC_Catalog_c* m_pCatalog;
virtual vector<string> File_ToText (void) const;
}
vector<string> B::File_ToText( void ) const
{
vector<string> a_SubData;
a_SubData = m_pCatalog->File_ToText();
}