我正在尝试映射应该存在于共享库(.so)内的函数的地址。我成功地打开了库,并尝试获取其中函数的地址,如下所示:
fn_read = dlsym (handle, "functionName");
但是我收到错误,经过检查,错误是找不到该符号。我非常确定我调用的电话是正确的。我还 100% 确定我尝试映射的函数包含在共享库本身中。我不知道在这里该怎么做...有人可以指出我可能忽略的一些可能的错误/要点吗?
谢谢, 福尔
最佳答案
尝试使用unix/linux命令nm -g <library>.so
。它将列出您所有的C
风格符号。
请注意,C++ 参与“名称修改”,因此如果您没有导出“C 样式”符号,则名称很可能会被修改并且无法直接访问。 nm -gC <library>.so
还将显示损坏的 C++ 名称。
如果您尝试访问 C++ 符号,并且名称修改导致了问题,请遵循 C++ FAQ light on mixing C and C++ 中的指南。可能会有所帮助。
关于c - 无法在共享库 (.so) 中找到符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12413266/