问题标签 [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.
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
c - 如何像 nm 命令一样显示符号的类型?
我现在正在研究 ELF 格式。我必须编写一个简单的 nm 函数(没有选项)。我已经在输出上打印了符号的值和符号的名称。
这是 nm 输出:
我有相同的,但没有“类型”。我正在使用 ELF64_Sym 结构,如下所示:
我知道我必须使用 st_info 变量和这个宏:
获取符号的类型。但是,符号类型可以是如下宏:
我想知道如何从这些宏中获取 nm 打印的字母,例如:
gcc - 指的是明显存在的一堆未解决的 OpenSSL 符号的错误?
我正在构建一个共享库(我们称之为“foo”),它使用另一个库(我们称之为“bar”)。“bar”利用了 OpenSSL 的一些功能。
这就是问题出现的地方。
“bar”被编译为静态库,OpenSSL 似乎也是如此。因此,当我链接库(“foo”)时,我包括:
- “foo”的目标文件
- 静态库
libbar.a
- OpenSSL 静态库
libcrypto.a
和libssl.a
构建命令看起来像这样:
但是,我得到了很多错误:
运行以下命令:
产生以下输出:
所以显然 OpenSSL 库没有任何问题。什么可能导致这样的事情?以下是用于构建 OpenSSL 的三个命令:
编译过程完成没有任何错误,所以我完全困惑。
为什么我会收到指向明显存在的一堆 OpenSSL 符号的链接器错误?
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——结果是一样的。请你帮助我好吗?
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 优化的。
c - 奇怪的链接行为和未定义的符号
我正在链接一个外部库(通过奇怪的进程,mpicc + Cython + 等),但我有一个链接过程的奇怪行为。
有两个 .o 文件,libpetsc4py.o 和 PETSc.o,它们链接到一个 .so 文件 PETSc.so
一个包含未定义的符号__pyx_tp_new_8petsc4py_5PETSc_Object
它在另一个 .o 文件中定义:
然后,链接完成(编译行很奇怪,对不起)
但最后,生成的文件有两个同名的符号,其中一个是未定义的,一切都不起作用:
我究竟做错了什么?为什么有两个同名的符号?
c - 手动设置函数地址 gcc
我有一个用于嵌入式系统的工作二进制文件。现在我想为它写一个补丁。补丁将被加载到主程序下方的 RAM 中,然后将从主程序中调用。问题是如何告诉 gcc 使用将从补丁中使用的某些函数的手动设置地址。换句话说:旧代码具有功能sin()
,我可以使用 nm 找出sin()
旧代码中的地址。我的修补代码将使用sin()
(或来自主程序的其他东西),我想告诉 gcc(或者可能是 ld 或其他东西)在sin()
链接修补代码时使用函数的静态地址。可能吗?
c - C89 和 C99 标准中可执行文件大小的差异
我使用 GCC 制作了一个可执行文件
然后我这样做
什么可能导致程序的文本大小不同,可能的原因是什么?
c - 在二进制文件中找不到 .dtors 和 .ctors
我正在阅读《黑客,剥削的艺术》一书。书中有一节解释 和 的.dtors
使用.ctors
。
我正在尝试复制本书的一个练习,但在我的可执行文件中我没有这部分。起初我认为问题在于我正在编译 64 位,但现在我正在编译 32 位,.dtors
并且.ctors
仍然没有出现在节表中。这是代码:
我正在编译:
这是的输出nm
:
objdump
既不显示.dtors
也不输出.ctors
也许这些部分__init_array_end
,__init_array_start
或者__do_global_dtors_aux
与.ctors
and的行为有关.dtors
?
android - 为什么我在 libs/armeabi/libtest.so 中找不到任何符号
当我使用时ndk
,我无法在shared_libraries
.
安卓.mk:
测试.cpp:
ndk-build, nm /libs/armeabi/libtest.so 后,结果是没有符号,为什么?