我正在尝试映射应该存在于共享库(.so)中的函数的地址。我成功地打开了库,并试图在其中获取函数的地址:
fn_read = dlsym (handle, "functionName");
但是我收到错误,并且在检查时错误是找不到符号。我很确定我正确地拨打了这个电话。我也100%确定我尝试映射的函数包含在共享库本身中。我不知道该怎么做......有人可以指出一些我可能忽略的错误/点吗?
谢谢, FAL
答案 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++中的准则可能会有所帮助。