gcc - 为什么 nm libc.so 报告没有符号?
问题描述
我已经构建了一个像这样的简单程序:
g++ 应用程序.cpp -o 应用程序.exe
然后执行命令;
ldd application.exe
...
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
...
我想列出 libc 库的所有符号:
nm /lib/x86_64-linux-gnu/libc.so.6
nm: /lib/x86_64-linux-gnu/libc.so.6: no symbols
nm --defined-only /lib/x86_64-linux-gnu/libc.so.6
nm: /lib/x86_64-linux-gnu/libc.so.6: no symbols
为什么 nm 报告没有符号?如果 libc.so.6 不是库,而是指向实际库的某种链接,那么我如何才能找到实际库?
解决方案
默认情况下,nm
读取.symtab
ELF 对象中的部分,这在不可重定位对象中是可选的。使用-D
/--dynamic
选项,您可以指示nm
读取动态符号表(这是运行时实际使用的符号)。您可能还想使用--with-symbol-versions
,因为 glibc 广泛使用符号版本控制。
或者,您可以使用eu-readelf --symbols=.dynsym
或objdump -Tw
。(readelf -sDW
不包括符号版本信息。)
推荐阅读
- c - CS50 Vigenere 字符不移动
- python - 计算从参考日期起 n 天的平均值
- javascript - 网站从浏览器到平板电脑都有响应,但在移动设备上没有响应。我该如何纠正?
- ruby-on-rails - 使用 JsonB 字段设计注册“字符串不匹配”
- sql - ORA-00936: 缺少表达式 00936. 00000 - “缺少表达式” *原因:
- visual-studio - 如何将颤振预构建包重置为默认值?
- scroll - FFMPEG:如何在不拉伸的情况下移动视频?
- powershell - 在目录名称格式为 YYYY-MM-DD 的目录中获取扩展名为 .JPG 的文件
- javascript - 暂停/恢复后过渡速度加快
- c# - JWT 的默认实现