问题标签 [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.

0 投票
1 回答
227 浏览

c - 静态库中外部符号的预期签名

我有一个静态库libTheLib.a(由其他人编译)。我正在尝试将它与我的程序联系起来。此库链接所需的功能之一是GetName. 我的项目中有一个函数void GetName(char*, int),但链接器仍在抱怨找不到符号。我猜也许 lib 正在寻找具有不同签名的函数。我尝试使用nm希望它会揭示到底在寻找什么,但它所说的只是

这不是很有帮助。还有其他方法可以找到它正在寻找的符号的签名吗?或者签名不是符号的一部分,它实际上可以链接到该名称的任何符号?

该库是写在C,我的程序是写的C++,但是函数声明为

此外,如果它有所作为(使用 XCode) ,这是使用clang,而不是gcc

0 投票
1 回答
2349 浏览

macos - 在 Mac 应用程序上使用 NM——格式错误的对象

我刚刚开始使用一些调试实用程序,包括 nm。我想分析我电脑上的一些程序。我下载的一些像 Sublime Text 一样使用都很好:

但是,我尝试分析的其他应用程序会抛出如下错误:

我确信它这样做有一个明显的原因,但我完全是空白。

0 投票
1 回答
782 浏览

linux - 共享库使用的外部符号计数

我想找到一些外部符号,由另一个共享库(.so)使用。我可以轻松跑

并通过 grepping 获取使用的符号列表,例如“U”(未定义的符号):

现在我想知道,在整个库“lib_the_one.so”中(静态)存在多少个符号的用法。更确切地说,

  • 一些外部函数有多少直接调用
  • 外部变量被引用多少次

例如,我想知道我的“lib_the_one.so”中有 10 个函数,其中调用了对calloc它们的调用,还有 5 个函数调用了malloc.

如何使用 nm、objdump 或任何其他实用程序 binutils(我的操作系统是 Linux)来做到这一点?

0 投票
2 回答
688 浏览

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)

0 投票
1 回答
150 浏览

c++ - 如何在共享库中找到 C++ isfinite() 的解析位置?

我正在尝试追踪isfinite()为 C++ 应用程序定义的位置。我一直在 for 的共享库上运行,nm也递归地在共享库的共享库上运行,但到目前为止还没有找到为 提供定义的库,但我的应用程序解析了符号并运行。是否有一个 linux 工具可以计算为特定可执行文件解析符号的库?grepisfiniteisfinite

0 投票
1 回答
648 浏览

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 编译器在编译时删除未引用的常量变量是否允许优化?

0 投票
1 回答
223 浏览

c - 如何从 C 执行 nm 并捕获输出

我正在尝试编写一个程序来检查另一个程序的全局变量的大小。让我们称我的程序“check”和被检查的程序“a.out”,这意味着我将像这样运行我的程序:

我认为我可以使用以下命令找到这个值:

我知道您可以使用 fork/execl 从程序中执行程序,但是我在编写 IO 管道时遇到了一些麻烦。

使用一些简单的 strcpy/strcats,我有一个包含上述字符串的 c 字符串,我可以使用 execl 调用它,但它似乎没有打印任何内容。现在它看起来像这样:

谁能指出我设置这些管道的正确方向?

0 投票
2 回答
458 浏览

c - 在 C 中,为什么我的初始化为 0 的 int 变量会被“nm”报告为未初始化?

我有以下 C 代码:

我注意到对于这些变量中的任何一个,如果它们具有非零值,它们会被“nm”命令报告为类型“D”(已初始化):

但是,那些初始化为 0 的报告为“B”(未初始化):

为什么“用 0 初始化”和“用除 0 以外的其他东西初始化”之间的区别?

0 投票
1 回答
3115 浏览

c - nm实用程序输出中符号大小的输出格式是什么

我正在使用以下命令

样本输出:

00000000166140e0是符号的大小tax_dtl_buf

谁能解释如何解释这个尺寸?我的意思是如何将其转换为千字节。

0 投票
3 回答
2013 浏览

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 的编译时说符号已经在某处定义并且不需要添加这些符号?