-1

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

fn_read = dlsym (handle, "functionName");

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

谢谢,法尔

4

2 回答 2

1

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

于 2012-09-13T19:20:24.940 回答
1

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

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

如果您尝试访问 C++ 符号,并且名称修改导致了问题,那么遵循C++ FAQ 中关于混合 C 和 C++的指导可能会有所帮助。

于 2012-09-13T19:22:00.160 回答