我正在尝试使用auCDtect来检查我的音频文件的真实性。通过添加 libstdc++-libc6.2-2.so.3,我可以在我的 Synology NAS (DS918+) 上成功运行 linux 二进制文件。我想在我的 macbook pro 笔记本电脑上更快地做到这一点。我在 Debian GNU Linux 9(在 Parallels Desktop 中)重复了相同的步骤,导致了这个错误:
Fatal error: glibc detected an invalid stdio handle
fish: 'aucdtect' terminated by signal SIGABRT (Abort)
数据库:
(gdb) run
Starting program: /usr/local/bin/aucdtect
Fatal error: glibc detected an invalid stdio handle
Program received signal SIGABRT, Aborted.
0xf7fd7c89 in __kernel_vsyscall ()
(gdb) bt
#0 0xf7fd7c89 in __kernel_vsyscall ()
#1 0xf7d8fdf0 in raise () from /lib32/libc.so.6
#2 0xf7d912b7 in abort () from /lib32/libc.so.6
#3 0xf7dcb3af in ?? () from /lib32/libc.so.6
#4 0xf7dcb3ec in __libc_fatal () from /lib32/libc.so.6
#5 0xf7dcbd73 in ?? () from /lib32/libc.so.6
#6 0xf7da641b in vfprintf () from /lib32/libc.so.6
#7 0xf7dad7c8 in fprintf () from /lib32/libc.so.6
#8 0x080492d4 in ?? ()
#9 0xf7d7c286 in __libc_start_main () from /lib32/libc.so.6
#10 0x080489b1 in ?? ()
(gdb)
#0 0xf7fd7c89 in __kernel_vsyscall ()
#1 0xf7d8fdf0 in raise () from /lib32/libc.so.6
#2 0xf7d912b7 in abort () from /lib32/libc.so.6
#3 0xf7dcb3af in ?? () from /lib32/libc.so.6
#4 0xf7dcb3ec in __libc_fatal () from /lib32/libc.so.6
#5 0xf7dcbd73 in ?? () from /lib32/libc.so.6
#6 0xf7da641b in vfprintf () from /lib32/libc.so.6
#7 0xf7dad7c8 in fprintf () from /lib32/libc.so.6
#8 0x080492d4 in ?? ()
#9 0xf7d7c286 in __libc_start_main () from /lib32/libc.so.6
#10 0x080489b1 in ?? ()
我想这可能是因为该程序太旧(2004 年)并且与较新的库不兼容。我怎样才能找出导致问题的库(可能是 libc?),以及我应该获得哪个旧版本?
只要我记得自己,我就一直在 wine 下使用 auCDtect:
您还可以考虑https://github.com/alexkay/spek以可视形式显示波形。您可以立即查看音频文件是否已由错误的编码器处理,尽管即使在 256Kbit/秒的情况下,好的编码器(例如 Apple AAC)通常几乎不可能以这种方式检测到,但 auCDtect 也会将它们显示为 CDDA。
要查看它使用了哪些共享库,您可以通过
ldd /path/to/binary
. 它不会让您了解它需要哪些版本的库。我曾经
ldd /usr/local/bin/aucdtect
找到使用的库aucdtect
(主要是 libc 和 libm),从我的 NAS 复制它们,将它们放在与 相同的目录中aucdtect
,然后设置LD_LIBRARY_PATH
为/usr/local/bin
. 使用这种方法,我能够aucdtect
在虚拟机中运行。但是,wine
在 macOS 上使用比在虚拟机中使用快近 3 倍(样本大小=1),所以我最终wine
改为使用它。