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
?