首页>Program>source

我做过各种各样的研究,尝试了许多不同的事情.我知道这个问题已经回答了很多次,但是没有建议的解决方案对我有用。

升级到Lion之后,我在Ruby中遇到了分段错误.我相当有信心是Nokogiri.所以我通过Homebrew安装了libxml2.我跑了 .然后,我使用该版本的库重新安装了Nokogiri。

为证明:

brew link libxml2

我已经在我的gemfile的顶部包含了Nokogiri,并且在我的环境文件中也需要它.我不知道为什么我仍然收到警告。

是否有任何建议或想法来确保它正在加载正确的libxml2版本?

$ nokogiri -v # Nokogiri (1.5.0) --- warnings: [] nokogiri: 1.5.0 ruby: version: 1.9.2 platform: x86_64-darwin11.0.0 description: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0] engine: ruby libxml: binding: extension compiled: 2.7.8 loaded: 2.7.8
最新回答
  • 2021-1-9
    1 #

    我刚刚度过了大部分时间来解决此警告.此修复程序适用于使用Mac OS Lion的用户.上面使用

    的修复
    bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local
    

    用于通过MacPorts安装libxml2的Snow Leopard。

    对于Lion,libxml2作为引导过程的一部分被加载.无论Nokogiri指向哪个libxml2,都会在运行时使用Lion系统的libxml2默认库. Lion使用在 /usr中找到的libxml2.2.7.3 (不是 /usr/local )。

    正如许多其他地方所提到的,人们可以忽略警告.如果像我一样,警告使您发疯,则可以执行以下操作:

    bundle config build.nokogiri --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local
    

    有趣的是,如果您键入 nokogiri -v 在命令行上,您将得到相反的警告:

    WARNING: Nokogiri was built against LibXML version 2.7.3, but has dynamically loaded 2.7.8
    

    这表明还有更多关于如何加载libxml2的信息,在环境路径中,Ruby和Rails使用系统加载的libxml2,命令行使用libxml2.无论如何,这对我来说是个错误。

    我再说一遍-这仅适用于Lion.先前的修复程序将适用于Snow Leopard。

    这是答案的结尾.在这里停止阅读。


    好的,您没有停止阅读...嗯...

    不推荐!!!!!

    您已被警告.您可以通过禁用 /usr/lib中的libxml2来验证Mac OSX是否在其引导程序中加载了libxml2库。 .做类似复制所有版本的 libxml2*.dylib的操作 到 libxml2*.dylib.old (在我的机器上,这是 libxml2.2.7.3libxml2.2libxml2 )。

    完成此操作后,运行Nokogiri将不会产生任何错误.这是因为它找不到已加载的libxml2,并且现在会遵循环境路径,最终找到 libxml2.2.7.8/opt/local

    但是您将无法复制旧的libxml文件.这是因为操作系统需要在引导程序中加载的libxml2。

    关闭电源并再次打开电源将使您的机器变砖.登录屏幕将挂起并挂起并挂起.关闭电源,然后以单用户模式重新打开电源(重新引导时按住Command-S).您可以观看引导程序的发生.低估,它抛出一个错误,提示它无法加载libxml2,然后停止工作。

    关闭电源,然后再次打开.这次引导进入恢复模式(按住Command-R或按住Option,然后选择恢复磁盘).在恢复模式下,打开终端( utilities/terminal ).维兹威山 在您的HD上播放(尝试 /usr/lib ),然后将libxml2文件复制回去.重新启动,一切都会好起来。

  • 2021-1-9
    2 #

    如果您用 /Volumes/Macintosh\ HD/usr/lib安装了Nokogiri ,您可以通过运行 gem install nokogiri解决此警告 重新编译gem的C扩展名。

    如果您使用 gem pristine nokogiri安装了Nokogiri ,您可以通过运行 bundle install解决此警告 要在Bundler安装在哪里的地方重新编译gem的C扩展名。

  • 2021-1-9
    3 #

    要解决此问题,如果您使用自制软件和捆绑软件,请添加 bundle exec gem pristine nokogiri gem 'nokogiri' 你的 to the top ,然后运行以下命令:

    Gemfile
    

    如果您不使用捆绑程序,请改为运行以下命令:

    gem uninstall nokogiri libxml-ruby
    brew update
    brew uninstall libxml2
    brew install libxml2 --with-xml2-config
    brew install libxslt
    bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
    bundle install
    

    在您的应用中,您应该 gem uninstall nokogiri libxml-ruby brew update brew uninstall libxml2 brew install libxml2 --with-xml2-config brew install libxslt gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/ ,以强制应用程序加载动态libxml2库,而不是无法指定要加载哪个库的gems加载的旧系统版本的libxml2。

  • 2021-1-9
    4 #

    对我来说,这些都没有用。

    我在带有brew的更高版本(2.7.8)中安装了libxml2.这导致nokogiri对其进行了编译,并随后出现了问题.解决方案,将其删除,然后构建,然后根据需要安装。

    这是有效的方法:

    require nokogiri first

      (如果先前已安装)

      brew uninstall libxml2

      gem uninstall nokogiri

      gem install nokogiri (可选)

      p

      更新为Mountain Lion之后的解决方案(对我而言)要简单得多:

      brew install libxml2
      
      gem uninstall nokogiri # (and ignore the warnings about dependencies) gem install nokogiri

相关问题

  • jquery:如何创建切换按钮?
  • c++:C ++ 11中是否有一个范围类可用于基于范围的for循环?