【问题标题】:Library not loaded: /usr/lib/libxslt.1.dylib error loading library after installing with CPAN未加载库:使用 CPAN 安装后 /usr/lib/libxslt.1.dylib 错误加载库
【发布时间】:2013-06-27 14:17:05
【问题描述】:

我试图通过 CPAN 安装 XML::LibXSLT,这似乎工作正常,直到我尝试加载 Google Chrome 或 Microsoft Office。我在启动这些程序时遇到错误,并出现以下错误:

Dyld Error Message:
Library not loaded: /usr/lib/libxslt.1.dylib
Referenced from: /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks   
/DictionaryServices.framework/Versions/A/DictionaryServices
 Reason: no suitable image found.  Did find:
/usr/lib/libxslt.1.dylib: mach-o, but wrong architecture
/usr/lib/libxslt.1.dylib: mach-o, but wrong architecture

显然问题在于 XSLT 安装的新 dylib,但这些似乎都是 X86_64,所以我不应该看到任何问题,我运行的是 Mac OS X 10.6.8。

运行时file /opt/local/lib/libxslt.dylib 我得到: /opt/local/lib/libxslt.dylib: Mach-O 64-bit dynamically linked shared library x86_64 与 libxslt.1.dylib 相同。

有没有办法解决这个问题,恢复原来必须被替换的文件?

编辑:如果要从另一个 Mac 10.6.8 64 位获取这些库的副本并用这些替换我明显混淆的库,这至少可以解决它们全部混合的问题吗起来。

也在运行 [/usr/lib]$ ls | grep libxslt 给我:

libxslt 2.dylib
libxslt-plugins
libxslt.1.dylib
libxslt.a
libxslt.dylib
libxslt.la
libxslt.pc

【问题讨论】:

    标签: macos perl architecture shared-libraries


    【解决方案1】:

    您是否安装到或以其他方式替换了 /usr/lib 中 Apple 提供的原始库?你不应该永远那样做。否则,您可能会破坏依赖这些库的 OS X 的其他部分。您应该从备份中恢复原始库或重新安装 OS X。如果您想要更新版本,您应该将它们安装在其他地方,例如 /usr/local/lib。或者更好的是,您应该使用第三方包管理器,例如 Homebrew 或 MacPorts;事实上,从/opt/local/lib 路径来看,您似乎正在使用 MacPorts。使用它并且不要更改/usr/usr/local 除外)或/System/Library 中的系统文件。

    【讨论】:

    • 我没有手动更改它们中的任何一个,但我感觉 CPAN 做了并且只是替换了现有的;与其卸载它们,不如使用另一个 /usr/lib 文件并将其与我的工作合并,如果它们也在完全相同的 Mac 版本上?
    • XML-LibXSLT 发行版安装它自己的 libxslt 副本,请参阅Makefile.PL,并且只提供与库的 Perl 绑定。 Matt C,如果系统库真的被替换了,那你肯定是从别的地方弄到的。
    【解决方案2】:

    这可能是相关的:How to compile universal binaries on Mac OS X

    我遇到了同样的问题,我重新编译了 libxslt 和 libxml 以支持 python 绑定,然后开始收到 /usr/lib/libxslt.1.dylib: mach-o, but wrong architecture 错误并在启动某些应用程序时立即崩溃(特别是 Synergy,它是 32 位 / i386 应用)

    我通过使用这些配置选项重新编译 libxml2libxslt 解决了这个问题:

    ./configure CFLAGS="-arch i386 -arch x86_64" \ CXXFLAGS="-arch i386 -arch x86_64" \ LDFLAGS="-arch i386 -arch x86_64" \ --disable-dependency-tracking

    现在 libxml2 和 libxslt 库已正确显示为通用二进制文件:

    $ file /usr/local/lib/libxslt.1.dylib /usr/local/lib/libxslt.1.dylib: Mach-O universal binary with 2 architectures
    /usr/local/lib/libxslt.1.dylib (for architecture i386): Mach-O dynamically linked shared library i386
    /usr/local/lib/libxslt.1.dylib (for architecture x86_64):   Mach-O 64-bit dynamically linked shared library x86_64
    
    $ file /usr/local/lib/libxml2.2.dylib
    /usr/local/lib/libxml2.2.dylib: Mach-O universal binary with 2 architectures
    /usr/local/lib/libxml2.2.dylib (for architecture i386): Mach-O dynamically linked shared library i386
    /usr/local/lib/libxml2.2.dylib (for architecture x86_64):   Mach-O 64-bit dynamically linked shared library x86_64
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 2019-07-13
      • 2014-09-28
      • 2013-10-13
      • 2018-09-02
      • 2021-05-25
      相关资源
      最近更新 更多