为什么LD_PRELOAD“v4l1compat.so”不能与64位Skype一起使用?

可能重复:
从11.10升级到12.04后,Skypevideo无法正常工作

我正在尝试对我的网络摄像头进行故障排除,并使其与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无法预加载:忽略”错误信息?

我想我发现了。

虽然从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。