【发布时间】:2021-11-27 15:06:16
【问题描述】:
我有一个使用 FTDI 驱动程序库的 python 应用程序,名为:
/usr/local/lib64/libftd2xx.so.1.4.22
当我使用 libc 2.27 运行应用程序时,它运行良好。
当针对 libc 2.32 运行它时,它会失败并显示以下内容:
/usr/local/lib64/libftd2xx.so: undefined symbol: stime
在查看 libc 版本时,确实有一些与 libc 2.31 中的时间相关的内容,如下所述:https://lwn.net/Articles/811315/
上面写着:
"已过时的函数 stime 不再可用于新链接的 二进制文件,其声明已从
中删除。"
我的理解是只有“新代码”不能编译/链接这个函数,但使用这个函数的现有库应该仍然可以工作。
事实上,如果我在 2.27 和 2.32 中粗略地查找以下命令的时间符号,我发现时间就在那里:
2.27
root@PPL23:~# nm --demangle --dynamic --defined-only --extern-only /lib/x86_64-linux-gnu/libc-2.27.so* | grep stime
00000000000d5ee0 T stime
2.32
localhost /tmp # nm --demangle --dynamic --defined-only --extern-only /lib64/libc-2.32.so | grep stime
000000000012e490 T stime@GLIBC_2.2.5
为什么 libc 2.32 不能向后兼容现有的 FTDI 驱动程序?由于符号似乎在那里,即使使用 2.32 版本也不应该工作吗?
【问题讨论】:
-
问题是什么?
-
问题是为什么libc没有实现向后兼容