【问题标题】:RVM installing Ruby for i386 rather than x86_64 on OSX 10.8.2RVM 在 OSX 10.8.2 上安装 Ruby for i386 而不是 x86_64
【发布时间】:2012-10-15 21:16:08
【问题描述】:

我在两台不同的 OSX 10.8.2 机器上安装了 Ruby/Gem/Rails。一个工作正常,另一个似乎工作,直到我尝试安装一个包含本机代码(如 pg)的 gem。当我这样做时

gem install pg -v 0.12.2 

失败并显示“找不到 PostgeSQL 客户端库 (libpq)。

如果我查看 mkmf.log,我会看到:

have_library: checking for PQconnectdb() in -lpq... -------------------- no "gcc-4.2 -o conftest -I/Users/brian/.rvm/rubies/ruby-1.9.3-p286/include/ruby-1.9.1/i386-darwin12.2.0 -I/Users/brian/.rvm/rubies/ruby-1.9.3-p286/include/ruby-1.9.1/ruby/backward -I/Users/brian/.rvm/rubies/ruby-1.9.3-p286/include/ruby-1.9.1 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/usr/include -I/Users/brian/.rvm/usr/include -fno-common -pipe conftest.c -L. -L/Users/brian/.rvm/rubies/ruby-1.9.3-p286/lib -L. -L/Users/brian/.rvm/usr/lib -L/usr/local/lib -L/usr/lib -lruby.1.9.1 -lpq -lpthread -ldl -lobjc " ld: warning: ignoring file /usr/local/lib/libpq.dylib, file was built for unsupported file format ( 0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0 ) which is not the architecture being linked (i386): /usr/local/lib/libpq.dylib Undefined symbols for architecture i386: "_PQconnectdb", referenced from: _t in ccLXteQk.o

我认为这是因为被忽略的库是 64 位库(如我所愿),但我的 ruby​​ 安装是 32 位(出于某种原因)。作为证据,在我看到的工作机器上

~/.rvm/rubies/ruby-1.9.3-p194/include/ruby-1.9.1/x86_64-darwin12.2.0/ruby/config.h

失败的那个

~/.rvm/rubies/ruby-1.9.3-p194/include/ruby-1.9.1/i386-darwin12.2.0/ruby/config.h

抱歉,解释太长了。我已经尝试了很多方法来尝试为

设置架构
rvm install 1.9.3

正在生成这些目录。我的任何努力都没有导致“坏”机器生成与所需的 64 位二进制文​​件保持一致的包含目录。我没有故意在这些构建中设置架构,所以我现在很困惑,在“坏”机器的环境中是什么导致 ruby​​ 安装认为它应该构建 32 位二进制文​​件。有什么想法吗?

【问题讨论】:

  • 失败的那个 ~/.rvmrc 是什么样子的?
  • 两台机器都没有 .rvmrc 文件,但我确实在发生故障的机器上创建了一个文件以试图解决这个问题。虽然它没有改变结果,但我手动创建的那个文件只有这一行:rvm_archflags="-arch x86_64"

标签: ruby rvm x86-64 i386


【解决方案1】:

您可以将您的拱形标志传递给我相信的。赞gem install pg -- --arch-flags='i386'

或任何 pg 接受的拱标志。也应该是一个标志,你可以传递来定义拱类型(让它找到)

你也可以说gem install pg -- --with-pg-include=/path/to/pg/include --with-pg-dir=/path/to/pg_config

【讨论】:

  • 我会再试一次你分享的第一个建议,因为它最接近我的需要,尽管我相信基本问题又回到了安装 Ruby 作为起点。有一个头文件 (config.h),其中包含 32 位 (i386) 定义,我无法阻止在运行 RVM 安装 Ruby 时生成它。
  • 然后,如果您需要构建 32 位 ruby​​,再次手动使用 ARCHFLAGS 设置,将它们传递给构建过程。您甚至可以通过将rvm_archflags="-arch i386" 添加到您的$HOME/.rvmrc 文件来确保这是默认设置,该文件将应用于所有未来的构建。你说你之前添加了这个文件,但是你添加了错误的拱标志设置,所以一切都默认为 64 位构建。
  • 再次感谢 - ruby​​ 安装是 32 位安装,但这不是我想要的。我想要 64 位版本。我的理解是 i386 是 32 位,x86_64 是 64 位标志。通讯中的某些内容似乎是我没有说清楚,或者我误读了您的方向。
  • 卸载那个红宝石。如果它是 32 位的,那么它将查找和使用的任何库都是 32 位的。卸载它,运行rvm cleanup sources,在你的$HOME/.rvmrc 中添加rvm_archflags='--arch x86_64',在shell 中添加export ARCHFLAGS='--arch x86_64',然后再次运行ruby 安装。完成后,您应该安装 64 位 ruby​​。如果没有,您的编译器被破坏,或者您在不受 RVM 控制的地方在您的环境中取消设置 archflag。如果是这样,则根据需要安装剩余的 gem。确保安装的 postgresql 也是 64 位版本。
  • 嘿ddd - 再次感谢。在这一点上,我们在同一页面上。再次失败是因为所有 PG gem 安装失败,因为我有 64 位 pg 库,但 ruby​​ 安装坚持生产 32 位版本。在尝试了您的建议后,我再次得到了相同的结果。我求助于查看 rvm 脚本,最终发现我可以直接将 '--arch x86_64' 传递给 rvm。使用 'rvm --arch x86_64 install 1.9.3' 安装就可以了。我不知道为什么这没有在 ~/.rvmrc 中被选中,但我会接受的。只需 --64 也可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
相关资源
最近更新 更多