私はUbuntuの下でC++で共有ライブラリを作成しています。ソースコードには、ClassA.hとClassA.cppの2つのファイルが含まれています。シンボルルックアップエラー
ClassA.h:
namespace calss_a{
class ClassA{
public:
...
void foo(int nBlockIndex);
...
}
}
ClassA.h:
namespace calss_a{
...
void classA::foo(int nBlockIndex){printf("....");}
...
}
上記ソースコードからファイルとしてTEST.CPPに使用される.SOコンパイルベローズコンテンツの一部であります
...
class_a::ClassA * ptr = new class_a::ClassA();
...
ptr->foo(0);
...
ただし、test.cppの実行可能ビルドを実行すると、次のようなエラーが発生します。
シンボル検索エラー:/ホーム/ hzhu /テスト:未定義のシンボル:_ZN16class_a15ClassA16fooEj
しかし、私はint型「からの引数 "nBlockIndex"()ClassA.cppとClassA.hにFOOの種類を変更した場合"を" unsigned in "に変更し、.soファイルを再コンパイルすると、問題は消えます。さらなる実験では、引数「nBlockIndex」のタイプは、まだ 『int型』になるように定義されていますが、TEST.CPPに、私は 『foo』というこの方法を呼び出す:
ptr->foo(1); //pass 1 instead of 0
その後、問題が同様に消えます。
ここで何が起こっているのか誰にでも教えてください。
ありがとうございました。
を定義している場所を見つけるだろう。 –
"_ZN16class_a15ClassA16fooEj"のデアンギュラフォームを投稿できますか? (私のGNU C++ filtはデマングルすることができません)また、実行ファイル内の未定義のシンボルをチェックできますか?このエラーが発生すると、私は通常、期待されているシンボル(アンマングルバージョン)と提供されているシンボルを見つけます。 .soと実行ファイルのnmを実行すると、この情報を得ることができます。 – Kashyap
同じタイプミスが2番目のスニペットにもあります。 –