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

cod*_*ppo 2 linux linker shared-libraries

我有链接问题.我需要链接一个libfoo.so依赖于read我想在read.c文件中定义自己的函数的共享库.

我编译并链接所有内容,但在运行时我得到错误

/home/bar/src/libfoo.so: undefined symbol: sread.
Run Code Online (Sandbox Code Playgroud)

nm报告符号已定义

$nm baz | grep sread
  00000000000022f8 t sread
Run Code Online (Sandbox Code Playgroud)

但ldd报告符号未定义

$ldd -r baz | grep sread 
undefined symbol: sread (/home/bar/src/libfoo.so)
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?libfoo.so是一个共享库吗?

Emp*_*ian 13

首先,定义一个名为"read"的函数是一个坏主意(TM),因为它是所有UNIXen上的标准libc函数.执行此操作时,程序的行为是不确定的.

其次,read你定义的函数libbaz.so标有't'nm输出.这意味着此功能是本地的(外部不可见libbaz.so).全局函数标有'T'通过nm.

'static int read(...)'在read.c中定义它时使用了吗?如果没有,您是否使用链接器脚本,或者attribute((visibility(hidden))),或者-fvisibility=hidden在编译和链接时使用命令行libbaz.so