我的目标是通过构建本机扩展来安装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的开发人员预览,并且错误也是一样的。我没有试过的两件事:
- 安装XCode 4.1 for Snow Leopard - 即使理论上支持,Apple不再允许下载此文件。
- 雪豹安装的Xcode 3.2.6 - 我试图避免4GB的下载,但我刚开始它现在可以尝试今晚稍后
任何帮助是极大的赞赏,特别是如果你已经建立之前的OS X上的couchbase宝石。
我结束了安装一个新的红宝石1.9.3(通过rvm),只建立为64位。这样就可以构建64位gem并使用64位libcouchbase。我想我前进,我不能也不应该担心构建32位宝石/库。我们将看到。谢谢您的帮助。编辑:我还应该提到,我通过电子邮件向作者发送了关于其他内容的信息,并且他确实做出了回应并且很有帮助,所以对于所有内容感谢@avsej。 – emkman 2012-08-07 23:45:40