问题标签 [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 回答
3308 浏览

gcc - 库之间的 gcc 未定义引用

在链接时,我得到以下信息:

从使用中肯定可以看出nm --defined-only libSystem.a

libSystem.a 和 libMain.a 都被正确输入。链接器命令行选项:

-o "Game.so" -shared -Wl,-z,noexecstack "-lstdc++" "-lsupc++" "-lgnustl_static" "-lgcc" "libSystem.a" "libMain.a" -nostdlib -l"c" - l"m" -l"log" -l"gcc" -Wl,-soname,"libGame" -Wl,--no-undefined

0 投票
2 回答
8151 浏览

c - 如何像 nm 命令一样显示符号的类型?

我现在正在研究 ELF 格式。我必须编写一个简单的 nm 函数(没有选项)。我已经在输出上打印了符号的值和符号的名称。

这是 nm 输出:

我有相同的,但没有“类型”。我正在使用 ELF64_Sym 结构,如下所示:

我知道我必须使用 st_info 变量和这个宏:

获取符号的类型。但是,符号类型可以是如下宏:

我想知道如何从这些宏中获取 nm 打印的字母,例如:

0 投票
1 回答
1845 浏览

gcc - 指的是明显存在的一堆未解决的 OpenSSL 符号的错误?

我正在构建一个共享库(我们称之为“foo”),它使用另一个库(我们称之为“bar”)。“bar”利用了 OpenSSL 的一些功能。

这就是问题出现的地方。

“bar”被编译为静态库,OpenSSL 似乎也是如此。因此,当我链接库(“foo”)时,我包括:

  • “foo”的目标文件
  • 静态库libbar.a
  • OpenSSL 静态库libcrypto.alibssl.a

构建命令看起来像这样:

但是,我得到了很多错误:

运行以下命令:

产生以下输出:

所以显然 OpenSSL 库没有任何问题。什么可能导致这样的事情?以下是用于构建 OpenSSL 的三个命令:

编译过程完成没有任何错误,所以我完全困惑。

为什么我会收到指向明显存在的一堆 OpenSSL 符号的链接器错误?

0 投票
1 回答
126 浏览

c - linux sparc so库中的名称修改

我有一些 sparc 库,我想拥有带有实名的导出函数列表。使用 objdump 或 nm 我得到类似__1cEnameIcopyType6MpnIASN1CTXT_rnLAsn1TObject_4_v___1cHsurname2t5B6M_v_这样的名称,以便 c++filt 无法对它们进行分解。我已经尝试过我的 nm 所拥有的每一种风格——gnu、lucid、arm、hp、edg、gnu-v3、java、gnat——结果是一样的。请你帮助我好吗?

0 投票
0 回答
1276 浏览

android - android ndk-build 未定义的参考,但 NM 说它在那里

已编辑:帖子末尾的解决方案。

我正在使用 NDK r8d、使用来自 NDK 的示例项目 hello-jni 以及使用 ARM 独立工具链编译的一些静态库为 android 构建一个共享库。

NDK-BUILD 抱怨未定义的引用。查看链接器命令及其输出:

然而,NM 说这个符号实际上是存在的:

简化的 OBInfo.h:

简化的 OBInfo.cpp

如果我删除 -Wl,--no-undefined 链接器没有错误结束。为什么 LD 找不到符号,但 NM 可以?(顺便说一句:NM 来自 MSYS,而 LD 来自工具链)

编辑:我解决了在 Android.mk LOCAL_STATIC_LIBRARIES 变量中更改静态库顺序的问题。我还重新编译了一些预构建的库,因为有些是在没有优化 -O0 的情况下编译的,而另一些是 -O2 优化的。

0 投票
1 回答
1434 浏览

c - 奇怪的链接行为和未定义的符号

我正在链接一个外部库(通过奇怪的进程,mpicc + Cython + 等),但我有一个链接过程的奇怪行为。

有两个 .o 文件,libpetsc4py.o 和 PETSc.o,它们链接到一个 .so 文件 PETSc.so

一个包含未定义的符号__pyx_tp_new_8petsc4py_5PETSc_Object

它在另一个 .o 文件中定义:

然后,链接完成(编译行很奇怪,对不起)

但最后,生成的文件有两个同名的符号,其中一个是未定义的,一切都不起作用:

我究竟做错了什么?为什么有两个同名的符号?

0 投票
1 回答
965 浏览

c - 手动设置函数地址 gcc

我有一个用于嵌入式系统的工作二进制文件。现在我想为它写一个补丁。补丁将被加载到主程序下方的 RAM 中,然后将从主程序中调用。问题是如何告诉 gcc 使用将从补丁中使用的某些函数的手动设置地址。换句话说:旧代码具有功能sin(),我可以使用 nm 找出sin()旧代码中的地址。我的修补代码将使用sin()(或来自主程序的其他东西),我想告诉 gcc(或者可能是 ld 或其他东西)在sin()链接修补代码时使用函数的静态地址。可能吗?

0 投票
1 回答
116 浏览

c - C89 和 C99 标准中可执行文件大小的差异

我使用 GCC 制作了一个可执行文件

然后我这样做

什么可能导致程序的文本大小不同,可能的原因是什么?

0 投票
2 回答
6458 浏览

c - 在二进制文件中找不到 .dtors 和 .ctors

我正在阅读《黑客,剥削的艺术》一书。书中有一节解释 和 的.dtors使用.ctors

我正在尝试复制本书的一个练习,但在我的可执行文件中我没有这部分。起初我认为问题在于我正在编译 64 位,但现在我正在编译 32 位,.dtors并且.ctors仍然没有出现在节表中。这是代码:

我正在编译:

这是的输出nm

objdump既不显示.dtors也不输出.ctors

也许这些部分__init_array_end__init_array_start或者__do_global_dtors_aux.ctorsand的行为有关.dtors

0 投票
1 回答
1117 浏览

android - 为什么我在 libs/armeabi/libtest.so 中找不到任何符号

当我使用时ndk,我无法在shared_libraries.

安卓.mk:

测试.cpp:

ndk-build, nm /libs/armeabi/libtest.so 后,结果是没有符号,为什么?