无法在共享库中找到符号(.so)

时间:2012-09-13 19:16:52

标签: c linux debugging shared-libraries

我正在尝试映射应该存在于共享库(.so)中的函数的地址。我成功地打开了库,并试图在其中获取函数的地址:

fn_read = dlsym (handle, "functionName");

但是我收到错误,并且在检查时错误是找不到符号。我很确定我正确地拨打了这个电话。我也100%确定我尝试映射的函数包含在共享库本身中。我不知道该怎么做......有人可以指出一些我可能忽略的错误/点吗?

谢谢, FAL

2 个答案:

答案 0 :(得分:1)

如果符号确实存在,唯一合理的原因是functionName是一个尚未声明为extern "C"的C ++函数。您可以添加extern "C"组件,也可以确定损坏的名称并找到它。

答案 1 :(得分:1)

尝试使用unix / linux命令nm -g <library>.so。它将列出您的所有C样式符号。

请注意,C ++参与“名称修改”,因此如果您没有导出“C样式”符号,则可能是名称被修复且无法直接访问。 nm -gC <library>.so还将显示损坏的C ++名称。

如果您尝试访问C ++符号,并且名称错误导致问题,请遵循C++ FAQ light on mixing C and C++中的准则可能会有所帮助。