2012-07-24 59 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

相关问题