2012-10-15 46 views
1

我在兩臺不同的OSX 10.8.2機器上安裝了Ruby/Gem/Rails。一個工作正常,另一個似乎工作,直到我試圖安裝一個包含像pg這樣的本地代碼的gem。當我做RVM在OSX 10.8.2上安裝Ruby for i386而不是x86_64

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位二進制文​​件。有任何想法嗎?

+0

是什麼〜.rvmrc看起來/像多數民衆贊成失敗的呢? – echristopherson

+0

這兩臺機器都沒有.rvmrc文件,但我確實在故障機器上的一個點上創建了一個文件,以嘗試通過該文件。雖然它沒有改變結果,但是我手工創建的那個文件只有這一行:rvm_archflags =「 - arch x86_64」 – Gooberholtzer

回答

0

你可以傳遞你的拱標誌給我相信。像gem install pg -- --arch-flags='i386'

或任何pg接受arch標誌。也應該是你可以通過定義拱類型的標誌(導致它的發現)

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

+0

我會再次嘗試您分享的第一個建議,因爲它與我所需要的最接近,儘管我相信最基本的問題是以安裝Ruby爲出發點。有一個頭文件(config.h),其中有32位(i386)定義,我無法防止在運行RVM來安裝Ruby時生成該文件。 – Gooberholtzer

+0

然後,如果您需要構建一個32位紅寶石,再次手動使用ARCHFLAGS設置,將它們傳遞給構建過程。 你甚至可以通過在''''HOME/.rvmrc'''文件中加入'''''''''''''''rvm_archflags =「 - arch i386」''''''''''''這個默認設置來應用於所有將來的版本。 你說你以前添加過這個文件,但是你添加了錯誤的拱標誌設置,所以一切都保持默認爲64位版本。 – ddd

+0

再次感謝 - ruby​​安裝是32位安裝,但這不是我想要的。我想要64位版本。我正在理解i386是32位而x86_64是64位標誌。交流中的某些事情似乎也許我沒有說清楚,或者我誤解了你的方向。 – Gooberholtzer