gpt4 book ai didi

linux - nm 报告符号已定义,但 ldd 报告符号未定义

转载 作者:太空狗 更新时间:2023-10-29 11:24:19 24 4
gpt4 key购买 nike

我遇到链接问题。我需要链接到共享库 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com