无法找到gnome-keyring-pkcs11.so文件,导致无法使用Wine。

我正在尝试在Ubuntu LTS 12.04 64位上使用Wine启动一个程序。

但是,当我这样做时,我收到以下错误信息...

/usr/lib/i386-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/i386-linux->gnu/pkcs11/gnome-keyring-pkcs11.so:无法打开共享对象文件:没有那个文件或目录

当我尝试创建64位库的符号链接时,当然会得到以下结果...

jackie@jackie-Latitude-E6410:~/tmp/AC$ wine TTG.exe
p11-kit: couldn't load module: /usr/lib/i386-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: 
/usr/lib/i386-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: wrong ELF class: ELFCLASS64
wine: Unhandled page fault on read access to 0x00000000 at address (nil) (thread 0009), 
starting debugger...
err:seh:raise_exception Unhandled exception code c0000005 flags 0 addr 0x7bc47aac

有没有一个安装32位和64位的软件包?
更新:
在Ubuntu 1.4中似乎存在一个错误。

https://launchpad.net/~ubuntu-wine/+archive/ppa

我按照这些步骤操作,我的应用程序成功运行了。

http://www.noobslab.com/2012/04/install-wine-152-on-ubuntu.html

不确定确切原因,但如果使用1.5似乎会忽略错误。


我尝试手动更新Rosetta Stone 4.1.10到4.1.15,使用了一个更新补丁,但在将wine1.4升级到wine1.5之前和之后,我得到了相同的错误。它似乎并没有真正修复任何问题。我是否需要完全删除现有的wineprefix并创建一个全新的? - Subhamoy S.
4个回答

解决这个问题并不需要更复杂的方法,只需简单的:
sudo apt-get install libp11-kit-gnome-keyring

适用于64位机器。或者
sudo apt-get install libp11-kit-gnome-keyring:i386

对于32位机器来说。 至少在13.04中是这样的,我看不出为什么在12.04/12.10不会成立。

3我觉得很奇怪,前面两个得票更多的答案都没有起作用,在12.04到13.04版本也没有起作用。但是按照你在这里指出的安装wine所说缺失的实际包,却起了作用。真遗憾我之前还要尝试上面提到的方法,才发现最后这个答案有效。 - Luis Alvarado
3那个软件包在Ubuntu 12.04中不可用。 - rik-shaw
2apt-get install gnome-keyring 对我来说有效,适用于64位的12.04版本。 - lukewendling
2在Ubuntu 13.10中安装libp11-kit-gnome-keyring:i386并不能解决问题。 - malisokan
4在Ubuntu 14.04上为我修好了。 - panmari
未找到在12.04中。 - SpamBot
我对为什么答案被修改以建议在64位机器上支持64位的问题感到困惑,因为问题显然是关于在64位机器上支持32位的。 - andy.holmes

这个解决方案适用于Ubuntu 12.04 64位版本。
我最初遇到了这个错误:
/usr/lib/i386-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: /usr/lib/i386-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: cannot open shared object file: No such file or directory

然后我用ln -s创建了一个链接到64位的库,结果出现了以下错误: /usr/lib/i386-linux-gnu/pkcs11/gnome-keyring-pkcs11.so: wrong ELF class: ELFCLASS64
注意:在开始之前,如果你已经创建了链接到64位库,请先删除它。
解决方案:
以下是修复方法。请注意,我正在使用Crossover 11.3,它使用wine 1.4,所以对于使用wine的用户也适用。
关于getlibs的更多相关信息可以在这里找到。
1)安装getlibs:
更新于2013年3月:从https://github.com/spaetzlecode/getlibs下载getlibs。
wget https://raw.github.com/spaetzlecode/getlibs/master/getlibs
sudo chown root:root getlibs
sudo chmod +x getlibs
sudo mv -n getlibs /usr/local/bin

2) 安装32位库:

sudo /usr/local/bin/getlibs -p gnome-keyring:i386

如果您收到此错误信息:
Failed to download file http://mirrors.kernel.org/ubuntu/pool/main/g/gnome-keyring/gnome-keyring_3.4.1-4ubuntu1~precise1_i386.deb

然后在这里下载文件:

wget https://launchpad.net/~gnome3-team/+archive/gnome3/+files/gnome-keyring_3.4.1-4ubuntu1~precise1_i386.deb

做:

/usr/local/bin/getlibs -i "path-of-the-file"/gnome-keyring_3.4.1-4ubuntu1~precise1_i386.deb

3) 创建符号链接:
sudo mkdir -p /usr/lib/i386-linux-gnu/pkcs11/ 
sudo ln -s /usr/lib32/i386-linux-gnu/pkcs11/gnome-keyring-pkcs11.so /usr/lib/i386-linux-gnu/pkcs11/gnome-keyring-pkcs11.so

现在运行您的Crossover/Wine应用程序,错误已经消失。

5对于那些在创建符号链接时出错的人,需要在/usr/lib/i386-linux-gnu中创建一个名为pkcs11的目录,然后再创建符号链接。我以前也遇到过同样的问题。 - user68627
2让我建议将链接放在 /usr/local/lib/... 中。 - rzr
这在12.10版本对你有效吗?对我来说,它去除了错误,但我的程序仍然无法启动。 - sup
那个获取getlibs的链接不再可用:(甚至getlibs的官方网站也无法访问。这是一个非常糟糕的消息,因为似乎没有其他方法可以解决它。Ubuntu 12.10 x64在我创建软链接时没有报错,但它并没有解决问题。 - Subhamoy S.
根据Sidney Sissaoui(shideneyu@gmail.com)的说法,可以在此处找到getlibs:http://developerslog.org/getlibs-all.deb。 - Subhamoy S.
9getlibs是不必要的,你可以使用apt从sources.list中的存储库下载(不安装)deb文件:apt-get download gnome-keyring:i386。我本来会提供使用apt、ar和tar来修复这个问题的方法,但是似乎我被禁止回答这个问题了。 - Oscar Korz
这在我的Ubuntu 13.04上没有起作用。我找到了一个解决方案,这个链接解决了问题。 - toto_tico
如果您正在使用Ubuntu Saucy Salamander(例如[tag:13.10] beta 1),并且出现错误消息“p11-kit:无法加载模块:/usr/lib/i386-linux-gnu/pkcs11/p11-kit-trust.so:/usr/lib/i386-linux-gnu/pkcs11/p11-kit-trust.so:无法打开共享对象文件:没有那个文件或目录”,那么只需执行与上面相同的命令,但也要包括p11-kit:首先执行sudo /usr/local/bin/getlibs -p p11-kit:i386,然后创建符号链接:sudo ln -s /usr/lib32/i386-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/i386-linux-gnu/pkcs11/p11-kit-trust.so - Reggie
2vaab的解决方案看起来简单得多,而且在我使用12.04版本时有效。我建议先尝试这个。 - Lambart

你可能已经猜到了,你需要获取文件/usr/lib/i386-linux-gnu/pkcs11/gnome-keyring-pkcs11.so。这个文件是i386 ubuntu软件包的一部分,无法直接安装在你的amd64系统上。但是你可以很容易地获取它:
cd $(mktemp -d)                      ## create and go to a temporary temp dir
apt-get download gnome-keyring:i386  ## download the i386 version of gnome-keyring
ar x gnome-keyring*.deb              ## Uncompress the package
tar xf data.tar.gz
## Finally move the file you need to the desired location:
sudo mv usr/lib/i386-linux-gnu/pkcs11 /usr/lib/i386-linux-gnu/

这在我使用的12.10版本和wine-1.5.29时发生过,而且i386版本的gnome-keyring标签为3.6.1-0ubuntu1_i386,对我来说这个方法有效。
请注意,如果这些指示对您不适用,也许您应该提及您的Ubuntu版本和gnome-keyring版本。谢谢!

3tar xf data.tar.gz 在我的电脑上应该是 tar xf data.tar.xz,至少是这样的... 谢谢。 - toto_tico
1实际上它没有起作用,数据文件夹中没有名为usr/lib/i386-linux-gnu/pkcs11的文件。相反,在usr/lib中有两个目录:usr/lib/gnome-keyringusr/lib/ubiquity - toto_tico
@toto_tico:显然,你的“gnome-keyring”软件包与我的不同。你能提供更多关于你的Ubuntu版本和“gnome-keyring”版本的信息吗?我已经在我的回答中添加了这些信息,方便你进行比较。 - vaab
谢谢@vaab。我终于在这里找到了我的解决方案(http://www.techspotde.com/wine-cant-find-gnome-keyring-pkcs11-so/)。我无法发布解决方案,因为我是这个社区的新成员。 - toto_tico
太棒了。与Crunchbang Waldorf合作过。 - Meredith
我正在使用Ubuntu 14.10,并遇到了同样的问题。我尝试了vaab的解决方案,但由于toto_tico提到的相同原因,它并没有起作用。有人解决了Ubuntu 14.10的这个问题吗? - incises
我正在使用Ubuntu 14.10,并遇到了同样的问题。我尝试了vaab的解决方案,但由于toto_tico的第一条消息所提到的原因,它失败了。然而,toto_tico之后给出的链接似乎与此无关。有人解决了Ubuntu 14.10上的这个问题吗?注意:我系统中原生安装的软件包有:libp11-kit-gnome-keyring(版本:3.10.1-1.ubuntu7)、gnome-keyring(版本:3.10.1-1.ubuntu7)和lib-gnome-keyring-common(版本3.8.0-2)。 - incises

另一个对我有效的选择是简单地重新安装libp11-kit0。
sudo apt-get install --reinstall libp11-kit0

这对我在Ubuntu 14.10上没有任何影响。 - incises
1为什么你要对12.04的答案进行负评,就其在14.10上的运行方式而言... - Brandon Bertelsen