ltrace:在"library.so"中找不到 .dynsym 或 .dynstr
ltrace: Couldn't find .dynsym or .dynstr in "library.so"
我尝试过使用ltrace。我尝试使用以下命令来评测程序sampleapp
、ltrace -c -T --library=library.so --output=out.txt ./SampleApp
使用的library.so文件。但它显示了上述错误。但是library.so是一个调试版本。所以符号表应该在那里。我试着用objdump --source library.so | grep CreateSocket()
来验证它。它返回使用CreateSocket()函数的代码。这意味着它包含一个符号表。为什么会出现这种错误?
相关文章:测量动态链接库每秒的CPU使用率
这取决于可执行文件SampleApp
是如何创建的。如果它是静态链接的,您将看到该错误。ltrace仅适用于动态链接的应用程序。
您可以运行ldd SampleApp
来显示共享对象依赖关系。它是动态链接的,并且依赖于libc,ldd
的输出将包含这样一行:
libc.so.6 => /usr/lib/libc.so.6 (0x00007fb24ac53000)
在这种情况下,您可以使用ltrace选项--library=libc.so.6
,它应该可以工作。但是,--library=libc.so
将不匹配(您不会得到错误,但不会匹配库调用)。
当静态链接时,ldd SampleApp
将显示以下输出:
not a dynamic executable
我认为这是因为静态链接可能是错误的然而,重要的一点是,如果ltrace显示此错误,则必须从可执行文件本身(二进制文件)以及它的创建方式(链接器选项)开始诊断,而不是从共享库开始诊断
问题ltrace(库跟踪工具)是如何工作的?有一些很好的参考资料,可以进一步了解ltrace的内部结构。
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 找不到QtResource文件中的文件
- VC++本机单元测试,找不到调试符号
- RegGetValue在当前用户下找不到名称
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- c++找不到具有相同哈希的无序集合元素
- 找不到以下加速库:boost_fiber
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- 设置 Visual Studio for MPI: 找不到标识符错误
- "assimp/config.h"找不到,但它在文件夹中
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- C++系统找不到指定的文件错误
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- vcpkg 添加新库,但找不到
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- ltrace:在"library.so"中找不到 .dynsym 或 .dynstr