我正在尝试排除网络摄像头的故障并使其与 Skype 配合使用。
经常建议的一种解决方法是 LD_PRELOAD v4l1compat.so 文件。但是当我尝试这样做时,我收到一条错误消息:
fdr@maggie:~$ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so skype
ERROR: ld.so: object '/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so' from LD_PRELOAD cannot be preloaded: ignored.
我确信路径是正确的:
fdr@maggie:~$ ls /usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so
/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so
并且内核和 skype 具有匹配的体系结构:
fdr@maggie:~$ uname -a
Linux maggie 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
fdr@maggie:~$ dpkg -s skype | grep Architecture
Architecture: amd64
我的问题是:
是什么导致了“...来自 LD_PRELOAD 无法预加载:忽略”错误消息?
答案1
我想我已经发现了。
尽管从 64 位软件包安装,但 Skype 是针对 32 位编译的:
fdr@maggie:~$ file `which skype`
/usr/bin/skype: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, BuildID[sha1]=0xd6667f895e58d47966d6a572b13125e9110ee256, stripped
因此,这两个:
fdr@maggie:~$ locate v4l1compat
/usr/lib/i386-linux-gnu/libv4l/v4l1compat.so
/usr/lib/x86_64-linux-gnu/libv4l/v4l1compat.so
在 LD_PRELOAD 中必须使用 i386。