- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我遇到链接问题。我需要链接到共享库 libfoo.so
,它依赖于函数 read
,我想在文件 read.c 中定义自己。
我将所有内容编译并链接在一起,但在运行时出现错误
/home/bar/src/libfoo.so: undefined symbol: sread.
nm 报告符号已定义
$nm baz | grep sread
00000000000022f8 t sread
但是ldd报告符号未定义
$ldd -r baz | grep sread
undefined symbol: sread (/home/bar/src/libfoo.so)
什么给了? libfoo.so 是共享库这一事实是否存在一些问题?
最佳答案
首先,定义一个名为“read”的函数是个坏主意,因为它是所有 UNIXen 上的标准 libc 函数。当您这样做时,您的程序的行为是未定义的。
其次,您在libbaz.so
中定义的read
函数在nm
中用't'
标记> 输出。这意味着这个函数是本地的(在 libbaz.so
之外不可见)。全局函数由 nm
标记为 'T'
。
你在read.c中定义的时候有没有使用'static int read(...)'
?如果不是,您是否在编译和链接时在命令行上使用了链接描述文件或 attribute((visibility(hidden)))
,或者 -fvisibility=hidden
libbaz.so
?
关于linux - nm 报告符号已定义,但 ldd 报告符号未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/942754/
我正在使用以下命令 nm -B -l -r --size-sort --print-size binaryName| grep ' B ' 示例输出: 00000000166140e0 0000000
我有一个共享库 (libARWrapper.so),其中包含以下两个条目,使用 nm (nm -D --define-only libARWrapper.so) 显示 00075854 T Java_
我正在编译我的代码以创建一个共享库,并最终将它们链接到正确的库(共享库)。但是,当我使用“nm -u”查看我的共享库时,它显示未解析的符号,主要来自(libm.so 和 libstdc++.so)。我
nm 命令报告一个符号同时是 U 和 T。U 代表未定义,据我所知符号位于另一个库中,但 T 是什么意思? 0000018c T _myfunc 你 _myfunc 最佳答案 查看 nm(1) 的手册
我正在我的库中搜索特定符号: nm --undefined-only -A libcpprest.a | grep "error_category" 我得到: libcpprest.a:json.cp
只是为了给您一些背景信息,以下是我正在努力实现的目标:我在共享对象文件中嵌入了一个 const char*,以便在 .so 文件本身中有一个版本字符串。我正在做数据分析,这个字符串使我能够让数据知道是
我构建了一个名为 InterfaceLayer.so 的动态库。当我打电话时: > nm InterfaceLayer 作为输出,我得到一些如下所示的符号: 00000e28 T _Z5startv
那是我的代码: int const const_global_init = 2; int const const_global; int global_init = 4; int global; st
nm在二进制文件中列出符号的实用程序在其文档中没有包含任何关于它如何命名的解释或线索nm . 我想一些经验丰富的 UNIX 开发人员可以提供一些启发。 为什么是nm这样命名的实用程序? 最佳答案 它是
我正在阅读SQLite的grammar,并对以下段落有一些疑问。 // The name of a column or table can be any of the following: // %t
我长期以来一直使用 cygwin 的 nm 命令来满足我所有的 .lib 符号调试需求,但最近我想在 SO 答案中引用它,并意识到大多数 Windows 开发人员没有安装 cygwin。 那么微软相当
我声明了两个静态变量。一个是全局的,另一个是主函数的局部的。之后我做了nm a.out 输出: 0000000000000000 l O .data 0000000000000004 glo
nm 的输出中有很多系统变量,看起来像这样 N _CRT_MT _CRT_fmode _CRT_glob Dictionary::variable4 namespace1::variable1 __c
我的应用程序被 Apple 拒绝了,因为我的应用程序以某种方式使用了私有(private) API。苹果说我的应用使用 框架:'/System/Library/Frameworks/CoreFound
有没有什么方法可以在不使用 nm 或其他工具的情况下找到所有全局变量,这需要在 Windows 中安装? 我的想法是通过查看链接器 *.map 文件,使用 perl 脚本手动查找所有全局变量。这是一种
我有一个使用 g++ 构建的共享对象文件,如下所示。 g++ -shared -fPIC -lpthread -O1 -std=c++11 -c AOTelemetry.cpp -L /home -I
我正在使用 Suse gcc 编译器编译我的库(C 编程),然后生成该库的 nm 报告。我必须将该 nm 报告与以前的版本库进行比较,以检查当前版本库中存在和不存在的符号。 nm libxxx0.1.
我将拥有这个 LABVIEW 程序,我必须在其中迭代大型数组(而不是队列),因此我有兴趣尽可能加快它们的速度。 我想我听说过 OpenCV,当读取一个元素时,从中提取该元素的页面包含以下列元素。这意味
我有 2 个目标文件,它们应该是相似的,因为它们来自同一代码库的 2 个不同的编译时间。我想比较他们的 nm 输出。但是我不能,因为有很多名称修改。由于名称修改,结果似乎有所不同,但实际上并非如此。我
我现在正在研究 ELF 格式。我必须编写一个简单的 nm 函数(没有选项)。我已经在输出上打印符号的值和符号的名称。 这是 nm 输出: value type name
我是一名优秀的程序员,十分优秀!