我愚蠢地sqlite3
从源代码编译并安装到/usr
,覆盖了默认库。
完成此操作后,Google Chrome 无法再启动,崩溃并显示以下输出:
Dyld Error Message:
Library not loaded: /usr/lib/libsqlite3.dylib
Referenced from: /System/Library/Frameworks/Security.framework/Versions/A/Security
Reason: no suitable image found. Did find:
/usr/lib/libsqlite3.dylib: mach-o, but wrong architecture
/usr/local/lib/libsqlite3.dylib: mach-o, but wrong architecture
/usr/lib/libsqlite3.dylib: mach-o, but wrong architecture
我可以以某种方式恢复sqlite3
到原来的版本,或者以其他方式解决问题吗?
答案1
我能够通过编译sqlite3
和i386
并将x86_64
其放入来解决这个问题/usr
:
./configure --prefix=/usr --disable-dependency-tracking CFLAGS="-arch i386 -arch x86_64"
答案2
在我的系统上,libsqlite3.dylib 作为 BaseSystem 包的一部分安装,并由 10.6.5 和 10.6.7 包更新。
$ grep -rl libsqlite3.dylib /var/db/receipts/
/var/db/receipts/com.apple.pkg.BaseSystem.bom
/var/db/receipts/com.apple.pkg.update.os.10.6.5.patch.bom
/var/db/receipts/com.apple.pkg.update.os.10.6.7.patch.bom
你可以使用类似下面的命令从原始 .pkg 文件中提取这些文件和平主义者,工具或者安装程序。我一开始并不清楚如何使用命令行工具从 .pkg 文件中提取单个文件。使用 Pacifist 非常简单;文档在这里。
答案3
如果您更改了 /usr 中的某些内容,则表示您更改了 Apple 提供的代码,因此您必须重新安装操作系统。但是,由于这是一个很大的更改,因此我会先尝试从您的备份中恢复 mysql :)。如果不行,请从以下位置获取组合 OSX 版本更新苹果。否则,转到 OSX DVD,您可以通过查看软件包内容来恢复一些文件 - 但是我的 OSX 搞乱了,并且没有正确的软件包名称。
对于这种特殊情况,您可以按照@gaearon 所说重新编译,但您必须获取正确的版本并假设 Apple 没有做任何更改。
一般情况下,我会使用包管理器 fink、macports 等添加新库,因为它们将内容放置在 Apple 系统区域之外,并处理 OSX 的任何异常。如果您自己编译,请使用 /usr/local