问题标签 [nm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 静态库中外部符号的预期签名
我有一个静态库libTheLib.a
(由其他人编译)。我正在尝试将它与我的程序联系起来。此库链接所需的功能之一是GetName
. 我的项目中有一个函数void GetName(char*, int)
,但链接器仍在抱怨找不到符号。我猜也许 lib 正在寻找具有不同签名的函数。我尝试使用nm
希望它会揭示到底在寻找什么,但它所说的只是
这不是很有帮助。还有其他方法可以找到它正在寻找的符号的签名吗?或者签名不是符号的一部分,它实际上可以链接到该名称的任何符号?
该库是写在C
,我的程序是写的C++
,但是函数声明为
此外,如果它有所作为(使用 XCode) ,这是使用clang
,而不是gcc
macos - 在 Mac 应用程序上使用 NM——格式错误的对象
我刚刚开始使用一些调试实用程序,包括 nm。我想分析我电脑上的一些程序。我下载的一些像 Sublime Text 一样使用都很好:
但是,我尝试分析的其他应用程序会抛出如下错误:
我确信它这样做有一个明显的原因,但我完全是空白。
linux - 共享库使用的外部符号计数
我想找到一些外部符号,由另一个共享库(.so)使用。我可以轻松跑
并通过 grepping 获取使用的符号列表,例如“U”(未定义的符号):
现在我想知道,在整个库“lib_the_one.so”中(静态)存在多少个符号的用法。更确切地说,
- 一些外部函数有多少直接调用
- 外部变量被引用多少次
例如,我想知道我的“lib_the_one.so”中有 10 个函数,其中调用了对calloc
它们的调用,还有 5 个函数调用了malloc
.
如何使用 nm、objdump 或任何其他实用程序 binutils(我的操作系统是 Linux)来做到这一点?
c++ - What does (.eh) mean in nm output?
When I look at the symbols in my library, nm mylib.a
, I see some duplicate entries that look like this:
When piped through c++filt
:
What does that .eh
mean, and what is this extra symbol used for?
I see it has something to do with exception handling. But why does that use an extra symbol?
(I'm noticing this with clang)
c++ - 如何在共享库中找到 C++ isfinite() 的解析位置?
我正在尝试追踪isfinite()
为 C++ 应用程序定义的位置。我一直在 for 的共享库上运行,nm
也递归地在共享库的共享库上运行,但到目前为止还没有找到为 提供定义的库,但我的应用程序解析了符号并运行。是否有一个 linux 工具可以计算为特定可执行文件解析符号的库?grep
isfinite
isfinite
c - C / 符号中的 const 数组在使用 nm 编译的 *.o 文件中不可见
我正在为嵌入式 power-pc 平台编程(使用 wind-river diab 编译器,如果这很重要)并且想将我的代码与预编译的目标文件 *.o 链接(当然是为同一平台编译的)。这些目标文件之一需要一个外部符号,我必须定义自己并链接到该 *.o 文件 - 否则链接器会抱怨:
但是,即使我用缺少的符号编译源文件(与预编译的 o.* 文件期望的签名相同:'unsigned char const [16]')并将其链接到 precompiled.o,链接器仍然会抱怨。myCFile.c:
我使用以下命令编译代码:
编译器警告我, mySymbolName 已声明但从未使用(当然不是 - 它是从另一个目标文件引用的 - 所以我认为警告很好)。使用命令链接:
失败并出现错误:
使用 nm (当然对于特定的目标平台)我发现,我的符号在我编译的目标文件中不可见: nm 只是不显示任何内容。但是,我找到了一种以 nm 显示符号的方法。如果我在我的 c 文件中删除 'const' 说明符,则:
nm 正确显示 mySymbolName。
所以我的问题是:这怎么可能?这是预期的行为 - 还是在不同平台上的行为不同?ANSI-C 编译器在编译时删除未引用的常量变量是否允许优化?
c - 如何从 C 执行 nm 并捕获输出
我正在尝试编写一个程序来检查另一个程序的全局变量的大小。让我们称我的程序“check”和被检查的程序“a.out”,这意味着我将像这样运行我的程序:
我认为我可以使用以下命令找到这个值:
我知道您可以使用 fork/execl 从程序中执行程序,但是我在编写 IO 管道时遇到了一些麻烦。
使用一些简单的 strcpy/strcats,我有一个包含上述字符串的 c 字符串,我可以使用 execl 调用它,但它似乎没有打印任何内容。现在它看起来像这样:
谁能指出我设置这些管道的正确方向?
c - 在 C 中,为什么我的初始化为 0 的 int 变量会被“nm”报告为未初始化?
我有以下 C 代码:
我注意到对于这些变量中的任何一个,如果它们具有非零值,它们会被“nm”命令报告为类型“D”(已初始化):
但是,那些初始化为 0 的报告为“B”(未初始化):
为什么“用 0 初始化”和“用除 0 以外的其他东西初始化”之间的区别?
c - nm实用程序输出中符号大小的输出格式是什么
我正在使用以下命令
样本输出:
这00000000166140e0
是符号的大小tax_dtl_buf
。
谁能解释如何解释这个尺寸?我的意思是如何将其转换为千字节。
c++ - 为库中的 C++ 模板实例强制定义符号
我想提供一个提供模板代码的库。但是当我能猜到我的模板的不同常用类型的用法时,我也想尽可能地保留这段代码(生成的代码)的所有权。这是我正在尝试做的一个例子:
lib1.h
lib1.cpp
我使用以下方法编译我的库:
g++ -shared -fPIC lib1.cpp -o lib1.so
当我使用我的图书馆时:
主文件
编译:
g++ main.cpp -l1
在这里,我希望符号 print_me<0>() 和 print_me<1>() 是从 lib1.so 定义和使用的,并且 print_me<2>() 定义并用于我的可执行文件(使用 nm --defined-only 检查)。但似乎并非如此!0 和 1 的符号在 lib1.so 中定义良好,但属于弱符号。并且再次在我的可执行文件(0、1和2)中重新定义,弱。这意味着我的可执行文件的 0 和 1 代码取自 main.cpp,这不是我想要的(我检查了 main.cpp 中的规范)。
有没有办法(例如在 lib1.h 中)在 main.cpp 的编译时说符号已经在某处定义并且不需要添加这些符号?