2012-07-24 57 views
0

我的目標是通過構建本機擴展來安裝couchbase ruby​​ gem,但我看起來像是gem和libcouchbase C之間的架構不匹配圖書館。下面是一些背景:我無法在os上構建couchbase ruby​​ gem x 10.6.8

  • 我正在從源代碼構建OS X 10.6.8,使用RVM和Ruby 1.9.2-P320
  • 我運行OS X 10.6.7和Xcode的3.2.5了直到昨天,但我無法建立libcouchbase本地
  • 我那麼這被稱爲安裝釀造,以幫助緩解libcouchbase安裝和釀造告訴我,我需要至少升級到3.2.6的Xcode
  • 我下載的是難以捉摸的Xcode 4.2 for Snow Leopard,因爲它超過了2個小於 Xcode 3.2.6的演出,我想我會得到最新版本。
  • Xcode不會安裝,因爲我發現的證書錯誤是系統安裝程序中的錯誤的結果,並且修復程序是升級到OS X 10.6.8,然後應用系統更新
  • 幾個小時稍後重新啓動,我正在運行OS X 10.6.8並安裝了XCode 4.2,libcouchbase通過brew進行編譯,沒有任何打嗝
  • 我現在嘗試安裝couchbase gem,但構建本機擴展失敗。它說,它無法找到libcouchbase即使明確地傳遞庫
  • 檢查mkmf.log的位置顯示以下(大膽加着重號,但我可能是錯的問題!

"/usr/bin/gcc-4.2 -o conftest -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include/ruby-1.9.1/universal-darwin10.8.0 -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include/ruby-1.9.1/ruby/backward -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include/ruby-1.9.1 -I. -I/usr/local/Cellar/libevent/2.0.19/include -I/opt/local/include -I/usr/local/include -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include -I/usr/include -I/Users/emkman/.rvm/usr/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long -arch i386 -arch x86_64 -fno-common -pipe -std=c99 -Wall -Wextra conftest.c -L. -L/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/lib -L/usr/local/Cellar/libevent/2.0.19/lib -L/opt/local/lib -L/usr/local/lib -L/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/lib -L/usr/lib -L/Users/emkman/.rvm/usr/lib -L. -arch i386 -arch x86_64 -L/usr/local/lib -arch i386 -arch x86_64 -lruby.1.9.1-static -lpthread -ldl -lobjc " checked program was:

/* begin */ 
1: #include "ruby.h" 
2: 
3: int main() {return 0;} 
/* end */ 

"/usr/bin/gcc-4.2 -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include/ruby-1.9.1/universal-darwin10.8.0 -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include/ruby-1.9.1/ruby/backward -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include/ruby-1.9.1 -I. -I/usr/local/Cellar/libevent/2.0.19/include -I/opt/local/include -I/usr/local/include -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include -I/usr/include -I/Users/emkman/.rvm/usr/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long -arch i386 -arch x86_64 -fno-common -pipe -std=c99 -Wall -Wextra -arch i386 -arch x86_64 -c conftest.c" checked program was:

/* begin */ 
1: #include "ruby.h" 
2: 
3: #include <stdarg.h> 
4: int foo(int x, ...) { 
5:  va_list va; 
6:  va_start(va, x); 
7:  va_arg(va, int); 
8:  va_arg(va, char *); 
9:  va_arg(va, double); 
10:  return 0; 
11: } 
12: int main() { 
13:  return foo(10, "", 3.14); 
14:  return 0; 
15: } 
/* end */ 

have_library: checking for libcouchbase_server_versions() in -lcouchbase... -------------------- no

"/usr/bin/gcc-4.2 -o conftest -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include/ruby-1.9.1/universal-darwin10.8.0 -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include/ruby-1.9.1/ruby/backward -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include/ruby-1.9.1 -I. -I/usr/local/Cellar/libevent/2.0.19/include -I/opt/local/include -I/usr/local/include -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include -I/usr/include -I/Users/emkman/.rvm/usr/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long -arch i386 -arch x86_64 -fno-common -pipe -std=c99 -Wall -Wextra conftest.c -L. -L/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/lib -L/usr/local/Cellar/libevent/2.0.19/lib -L/opt/local/lib -L/usr/local/lib -L/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/lib -L/usr/lib -L/Users/emkman/.rvm/usr/lib -L. -arch i386 -arch x86_64 -L/usr/local/lib -arch i386 -arch x86_64 -lruby.1.9.1-static -lcouchbase -lpthread -ldl -lobjc " ld: warning: ignoring file /usr/local/lib/libcouchbase.dylib, file was built for unsupported file format which is not the architecture being linked (i386) Undefined symbols for architecture i386: "_libcouchbase_server_versions", referenced from: _t in cckhpWpO.o ld: symbol(s) not found for architecture i386 collect2: ld returned 1 exit status lipo: can't open input file: /var/folders/AT/ATO2AJa-G3Ogm+J4qma1hE+++TI/-Tmp-/mkmf_20120724-40695-16d2a4n/ccAGPue9.out (No such file or directory) checked program was:

/* begin */ 
1: #include "ruby.h" 
2: 
3: #include <libcouchbase/couchbase.h> 
4: 
5: /*top*/ 
6: int main() {return 0;} 
7: int t() { void ((*volatile p)()); p = (void ((*)()))libcouchbase_server_versions; return 0; } 
/* end */ 

"/usr/bin/gcc-4.2 -o conftest -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include/ruby-1.9.1/universal-darwin10.8.0 -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include/ruby-1.9.1/ruby/backward -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include/ruby-1.9.1 -I. -I/usr/local/Cellar/libevent/2.0.19/include -I/opt/local/include -I/usr/local/include -I/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/include -I/usr/include -I/Users/emkman/.rvm/usr/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long -arch i386 -arch x86_64 -fno-common -pipe -std=c99 -Wall -Wextra conftest.c -L. -L/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/lib -L/usr/local/Cellar/libevent/2.0.19/lib -L/opt/local/lib -L/usr/local/lib -L/Users/emkman/.rvm/rubies/ruby-1.9.2-p320/lib -L/usr/lib -L/Users/emkman/.rvm/usr/lib -L. -arch i386 -arch x86_64 -L/usr/local/lib -arch i386 -arch x86_64 -lruby.1.9.1-static -lcouchbase -lpthread -ldl -lobjc " conftest.c: In function ‘t’: conftest.c:7: error: too few arguments to function ‘libcouchbase_server_versions’ conftest.c: In function ‘t’: conftest.c:7: error: too few arguments to function ‘libcouchbase_server_versions’ lipo: can't figure out the architecture type of: /var/folders/AT/ATO2AJa-G3Ogm+J4qma1hE+++TI/-Tmp-/mkmf_20120724-40695-cblicr/ccG9E6Cp.out checked program was:

/* begin */ 
1: #include "ruby.h" 
2: 
3: #include <libcouchbase/couchbase.h> 
4: 
5: /*top*/ 
6: int main() {return 0;} 
7: int t() { libcouchbase_server_versions(); return 0; } 
/* end */ 

所以,在我看來,問題是,海合會正在尋找/usr/local/lib/libcouchbase.dylib的i386的構建和檢查礦山顯示

/usr/local/lib/libcouchbase.dylib: Mach-O 64-bit dynamically linked shared library x86_64

所以,現在我的問題。這是問題還是紅鯡魚?我是否需要將libcouchbase構建爲i386或通用,或者是寶石方面的問題?我一直在這個系統上構建本地gem擴展多年,沒有問題,包括有時令人討厭的mysql gem,但是現在我已經有了新版本的GCC/Xcode。 rvm發佈說明說,Xcode 4.2只適用於Ruby 1.9.3並打破了很多原生擴展,所以我完全卸載它,然後安裝GCC-10.6.pkg從https://github.com/kennethreitz/osx-gcc-installer/這rvm建議作爲一個工作,但我仍然有相同的問題。這裏是我的BREW --env轉儲:

CC: /usr/bin/llvm-gcc => /usr/llvm-gcc-4.2/bin/llvm-gcc-4.2

CXX: /usr/bin/llvm-g++ => /usr/llvm-gcc-4.2/bin/llvm-g++-4.2

LD: /usr/bin/llvm-gcc => /usr/llvm-gcc-4.2/bin/llvm-gcc-4.2

CFLAGS: -Os -w -pipe -march=core2 -msse4.1 -mmacosx-version-min=10.6

CXXFLAGS: -Os -w -pipe -march=core2 -msse4.1 -mmacosx-version-min=10.6

CPPFLAGS: -isystem /usr/local/include

LDFLAGS: -L/usr/local/lib

MACOSX_DEPLOYMENT_TARGET: 10.6

MAKEFLAGS: -j2

無論是現在,當我已經安裝的Xcode 4.2,我-march設置爲酷睿2。應該是原生而不是?在安裝我最新的osx-gcc工具鏈之後,我通過rvm/JewelryBox從源代碼重建了ruby 1.9.2-p320,以確保它使用相同的標誌。它內置的普及,達爾文和似乎是正確的:

interpreter: "ruby" 
version:  "1.9.2p320" 
date:   "2012-04-20" 
platform:  "universal.x86_64-darwin10.8.0" 
patchlevel: "2012-04-20 revision 35421" 
full_version: "ruby 1.9.2p320 (2012-04-20 revision 35421) [universal.x86_64-darwin10.8.0]" 

我知道這是一個大量的信息,但我只是想徹底與細節,並表明我已經試過幾乎一切。我還應該提到,我已經嘗試了開發人員預覽了gem並結合libcouchbase的開發人員預覽,並且錯誤也是一樣的。我沒有試過的兩件事:

  1. 安裝XCode 4.1 for Snow Leopard - 即使理論上支持,Apple不再允許下載此文件。
  2. 雪豹安裝的Xcode 3.2.6 - 我試圖避免4GB的下載,但我剛開始它現在可以嘗試今晚稍後

任何幫助是極大的讚賞,特別是如果你已經建立之前的OS X上的couchbase寶石。

回答

1

我認爲這是一個很好的問題,因爲我記得經歷了一些類似的嘗試嘗試構建寶石的痛苦。不過那是一段時間以前,我沒有文件等方便記住我做了什麼,或者如果我的錯誤看起來像你的。

我知道它不如直接回答,但我認爲你應該能夠在這裏與寶石作者聯繫:https://groups.google.com/forum/#!forum/couchbase或通過Twitter上的@avsej。

+0

我結束了安裝一個新的紅寶石1.9.3(通過rvm),只建立爲64位。這樣就可以構建64位gem並使用64位libcouchbase。我想我前進,我不能也不應該擔心構建32位寶石/庫。我們將看到。謝謝您的幫助。編輯:我還應該提到,我通過電子郵件向作者發送了關於其他內容的信息,並且他確實做出了迴應並且很有幫助,所以對於所有內容感謝@avsej。 – emkman 2012-08-07 23:45:40

相關問題