无法构建gem原生扩展

最终的结果是我试图在我的OS 10.7.3上安装Ruby on Rails,但是遇到了各种各样的问题。

另外,我从App Store新安装了XCode 4.3。

当我启动终端时,输入:

sudo gem install rails 

它写出:

 Building native extensions. This could take a while... ERROR: Error installing rails: ERROR: Failed to build gem native extension. /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/json-1.6.5 for inspection. Results logged to /Library/Ruby/Gems/1.8/gems/json-1.6.5/ext/json/ext/parser/gem_make.out 

在我发现的所有修复程序中都说要安装XCode,我已经运行并且运行得很好。 但是,我确实卸载了以前版本的XCode来安装最新版本,所以我想知道那里是否有任何关系。

编辑1:我遵循了Jasdeep的建议并安装了RVM。 但是一旦我跑:

 sudo rvm install 1.9.3 

我得到以下内容:

 Fetching yaml-0.1.4.tar.gz to /Users/xxx/.rvm/archives Extracting yaml-0.1.4.tar.gz to /Users/xxx/.rvm/src Configuring yaml in /Users/xxx/.rvm/src/yaml-0.1.4. Error running ' ./configure --prefix="/Users/xxx/.rvm/usr" ', please read /Users/xxx/.rvm/log/ruby-1.9.3-p0/yaml/configure.log Compiling yaml in /Users/xxx/.rvm/src/yaml-0.1.4. Error running 'make ', please read /Users/xxx/.rvm/log/ruby-1.9.3-p0/yaml/make.log Database file /Users/xxx/.rvm/config/packages does not exist. gcc-4.2: error trying to exec '/usr/bin/i686-apple-darwin11-gcc-4.2.1': execvp: No such file or directory Installing Ruby from source to: /Users/xxx/.rvm/rubies/ruby-1.9.3-p0, this may take a while depending on your cpu(s)... ruby-1.9.3-p0 - #fetching ruby-1.9.3-p0 - #downloading ruby-1.9.3-p0, this may take a while depending on your connection... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 9330k 100 9330k 0 0 645k 0 0:00:14 0:00:14 --:--:-- 1260k ruby-1.9.3-p0 - #extracting ruby-1.9.3-p0 to /Users/xxx/.rvm/src/ruby-1.9.3-p0 ruby-1.9.3-p0 - #extracted to /Users/xxx/.rvm/src/ruby-1.9.3-p0 ruby-1.9.3-p0 - #configuring Error running ' ./configure --prefix=/Users/xxx/.rvm/rubies/ruby-1.9.3-p0 --enable-shared --disable-install-doc --with-libyaml --with-opt-dir=/Users/xxx/.rvm/usr ', please read /Users/xxx/.rvm/log/ruby-1.9.3-p0/configure.log There has been an error while running configure. Halting the installation. 

然后我查看了日志文件中的内容,..ruby-1.9.3-p0 / yaml / configure.log:

 [2012-03-03 22:49:50] ./configure --prefix="/Users/xxx/.rvm/usr" checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... config/install-sh -c -d checking for gawk... no checking for mawk... no checking for nawk... no checking for awk... awk checking whether make sets $(MAKE)... no checking for gcc... no checking for cc... no checking for cl.exe... no configure: error: in `/Users/xxx/.rvm/src/yaml-0.1.4': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details 

所以现在看来​​错误是:

 no acceptable C compiler found in $PATH 

编辑2:

我已经按照matt的说明,一旦安装了命令行工具就可以进一步(因为我现在有Xcode 4.3)。 但是,我仍然收到错误:

 Fetching yaml-0.1.4.tar.gz to /Users/xxx/.rvm/archives Extracting yaml-0.1.4.tar.gz to /Users/xxx/.rvm/src Configuring yaml in /Users/xxx/.rvm/src/yaml-0.1.4. Compiling yaml in /Users/xxx/.rvm/src/yaml-0.1.4. Installing yaml to /Users/xxx/.rvm/usr gcc-4.2: error trying to exec '/usr/bin/i686-apple-darwin11-gcc-4.2.1': execvp: No such file or directory Installing Ruby from source to: /Users/xxx/.rvm/rubies/ruby-1.9.3-p0, this may take a while depending on your cpu(s)... ruby-1.9.3-p0 - #fetching ruby-1.9.3-p0 - #extracted to /Users/xxx/.rvm/src/ruby-1.9.3-p0 (already extracted) ruby-1.9.3-p0 - #configuring Error running ' ./configure --prefix=/Users/xxx/.rvm/rubies/ruby-1.9.3-p0 --enable-shared --disable-install-doc --with-libyaml --with-opt-dir=/Users/xxx/.rvm/usr ', please read /Users/xxx/.rvm/log/ruby-1.9.3-p0/configure.log There has been an error while running configure. Halting the installation. 

以下是configure.log(对不起,这篇文章已经过了很长时间,但希望它也可以帮助其他人):

 [2012-03-04 09:29:35] ./configure --prefix="/Users/xxx/.rvm/usr" checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... config/install-sh -c -d checking for gawk... no checking for mawk... no checking for nawk... no checking for awk... awk checking whether make sets $(MAKE)... yes checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for style of include used by make... GNU checking dependency style of gcc... gcc3 checking how to run the C preprocessor... gcc -E checking whether ln -s works... yes checking whether make sets $(MAKE)... (cached) yes checking build system type... x86_64-apple-darwin11.3.0 checking host system type... x86_64-apple-darwin11.3.0 checking for a sed that does not truncate output... /usr/bin/sed checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for fgrep... /usr/bin/grep -F checking for ld used by gcc... /usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin11/4.2.1/ld checking if the linker (/usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin11/4.2.1/ld) is GNU ld... no checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm checking the name lister (/usr/bin/nm) interface... BSD nm checking the maximum length of command line arguments... 196608 checking whether the shell understands some XSI constructs... yes checking whether the shell understands "+="... yes checking for /usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin11/4.2.1/ld option to reload object files... -r checking for objdump... no checking how to recognize dependent libraries... pass_all checking for ar... ar checking for strip... strip checking for ranlib... ranlib checking command to parse /usr/bin/nm output from gcc object... ok checking for dsymutil... dsymutil checking for nmedit... nmedit checking for lipo... lipo checking for otool... otool checking for otool64... no checking for -single_module linker flag... yes checking for -exported_symbols_list linker flag... yes checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for dlfcn.h... yes checking for objdir... .libs checking if gcc supports -fno-rtti -fno-exceptions... no checking for gcc option to produce PIC... -fno-common -DPIC checking if gcc PIC flag -fno-common -DPIC works... yes checking if gcc static flag -static works... no checking if gcc supports -c -o file.o... yes checking if gcc supports -c -o file.o... (cached) yes checking whether the gcc linker (/usr/llvm-gcc-4.2/libexec/gcc/i686-apple-darwin11/4.2.1/ld) supports shared libraries... yes checking dynamic linker characteristics... darwin11.3.0 dyld checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes checking for doxygen... false checking for ANSI C header files... (cached) yes checking for stdlib.h... (cached) yes checking for an ANSI C-conforming const... yes checking for size_t... yes configure: creating ./config.status config.status: creating yaml-0.1.pc config.status: creating include/Makefile config.status: creating src/Makefile config.status: creating Makefile config.status: creating tests/Makefile config.status: creating win32/Makefile config.status: creating config.h config.status: config.h is unchanged config.status: executing depfiles commands config.status: executing libtool commands 

问题是在Lion Xcode 4.3中默认不安装(甚至包括)命令行工具,如gcc – 这些都是这里所需要的。 在Xcode的首选项的“下载”窗格中,在“组件”下,请求命令行工具。 (参见自述文件: https : //developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/WhatsNewXcode/Chapters/xcode_4_0.html#//apple_ref/doc/uid/TP40016147-SW35 )

实际上我相信你根本不需要安装Xcode,因为实际上命令行工具现在可以单独下载和安装。

我已经安装了命令行工具(xCode也是)……但仍然有这个(初始)错误。

问题是xCode和命令行工具不再安装gcc编译器。 我不知道他们什么时候停止运输它,但我跑山狮,它不在这里。 所以最终解决了我的问题是从头开始安装gcc( https://github.com/kennethreitz/osx-gcc-installer )。

保持微笑 :)

如果有人对Ubuntu Linux有同样的问题,解决方案是:

 sudo apt-get install build-essential sudo apt-get install libsqlite3-dev