我在两台不同的 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 位二进制文件。有任何想法吗?