EMF文件(.so)调试,符号未找到VTable错误

时间:2012-01-13 11:30:52

标签: c++ solaris

在Solaris中,我有一个exe文件,我需要添加一个共享库(.so)来扩展功能。我创建了一个lthmyplugin.so文件,并按照描述添加。现在,运行完全正常,直到它调用我的函数调用我的函数后,它失败了。

问题:

  1. 有没有办法调试?
  2. 当我运行命令truss时,它识别aa.so
  3. 此外ldd -d lthmyplugin.so除了

    外没有显示任何错误
        symbol not found: __1cIMyPluginG__vtbl_         (./lthmyplugin.so)    
        symbol not found: __1cIThPluginG__vtbl_         (./lthmyplugin.so)    
        symbol not found: __1cOThLocalOptionsG__vtbl_           (./lthmyplugin.so)    
        symbol not found: __1cJThOptionsG__vtbl_                (./lthmyplugin.so)     
    

    这会导致程序失败吗?

    fyi,我没有使用过任何虚函数,构造函数或析构函数

    这意味着什么意思找不到符号:_ 1cIThPluginG _vtbl_?

    谢谢,

1 个答案:

答案 0 :(得分:2)

您可以使用nm工具查看so文件公开的功能。你可以打电话:

nm -g lthmyplugin.so

...看看它暴露了什么功能。

除此之外,鉴于你已经将其标记为C ++,我将采取刺激并问:你是否指定了C风格的调用约定?如果你没有,它会破坏名字,使它们丑陋,不可读,在99.9%的情况下,是不可能的。您可以通过添加 __ attribute __((cdecl))告诉gcc不要破坏您的功能,如下所示:

int not_mangled(int some_arg) __attribute__((cdecl))
{
    return some_arg * 3;
}