当前函数的共享库名称是什么

时间:2019-02-25 12:52:31

标签: c++ shared-libraries

我正在做一个非常大的项目。我的项目包含许多共享库。一些源文件(CPP)在多个共享库中使用。

最近,我遇到了一个错误,需要在执行过程中找出函数的.so名称。

例如:

  1. Test1.cpp包含函数TestMethod()

  2. Test1.cpp包含在lib1,lib2和lib5中。大约有10个库。

  3. 因此,TestMethod存在于lib1,lib2和lib5中。

  4. 我想从TestMethod()内部调用一个函数,以便在执行程序时,调用TestMethod()时,它应该返回是lib1的版本还是lib2的版本还是lib5的版本。

TestMethod()正在创建SubType的对象,该对象是SuperType的子类。 SubType和SuperType在Test1.cpp中定义。有时lib6 / lib7在调用TestMethod并获取对象。完成后,lib6 / lib7在对象指针上调用delete。但是删除操作因分段错误而崩溃,回溯顶部显示“类别SubType类的typeinfo”。

[注1]:我正在使用libc ++库。 RTTI将无法在共享库中工作。因此,我怀疑这是导致问题的原因。我怀疑当调用delete时,它(lib6中的delete调用)似乎正在尝试获取SubType的typeinfo而无法获取它。

通过了解使用了什么库的信息,我可以调试编译,链接用于准备共享库的标志。

将感谢您的任何建议。谢谢

1 个答案:

答案 0 :(得分:0)

您可以为此使用环境变量LD_DEBUG=bindings。例如。查看在何处定义函数malloc

$ LD_DEBUG=bindings ls 2>&1 | grep '\bmalloc\b'
45968:     binding file /lib/x86_64-linux-gnu/libc.so.6 [0] to ls [0]: normal symbol `malloc' [GLIBC_2.2.5]
45968:     binding file /lib/x86_64-linux-gnu/libpcre.so.3 [0] to ls [0]: normal symbol `malloc' [GLIBC_2.2.5]
45968:     binding file /lib64/ld-linux-x86-64.so.2 [0] to /lib/x86_64-linux-gnu/libc.so.6 [0]: normal symbol `malloc' [GLIBC_2.2.5]
45968:     binding file /lib/x86_64-linux-gnu/libc.so.6 [0] to /lib/x86_64-linux-gnu/libc.so.6 [0]: normal symbol `malloc' [GLIBC_2.2.5]
45968:     binding file ls [0] to /lib/x86_64-linux-gnu/libc.so.6 [0]: normal symbol `malloc' [GLIBC_2.2.5]