Mac OS X安裝native gem提示找不到 dyld_stub_binding_helper,dyldfatalerror
在Mac OS X10.10下sudo gem install curses 返回如下錯誤:
apple@kissAir: ruby_src$sudo gem install curses
Password:
Fetching: curses-1.0.1.gem (100%)
Building native extensions. This could take a while...
ERROR: Error installing curses:
ERROR: Failed to build gem native extension.
/Users/apple/.rvm/rubies/ruby-2.1.3/bin/ruby extconf.rb
checking for tgetent() in -ltinfo... no
checking for tgetent() in -ltermcap... yes
checking for ncurses.h... yes
checking for initscr() in -lncursesw... no
checking for initscr() in -lncurses... yes
header: ncurses.h
library: ncurses
checking for beep()... yes
checking for bkgd()... yes
checking for bkgdset()... yes
checking for curs_set()... yes
checking for deleteln()... yes
checking for doupdate()... yes
checking for flash()... yes
checking for getbkgd()... yes
checking for getnstr()... yes
checking for init()... no
checking for init in ncurses.h... no
checking for isendwin()... yes
checking for keyname()... yes
checking for keypad()... yes
checking for resizeterm()... yes
checking for scrl()... yes
checking for set()... no
checking for set in ncurses.h... no
checking for setscrreg()... yes
checking for ungetch()... yes
checking for wattroff()... yes
checking for wattron()... yes
checking for wattrset()... yes
checking for wbkgd()... yes
checking for wbkgdset()... yes
checking for wdeleteln()... yes
checking for wgetnstr()... yes
checking for wresize()... yes
checking for wscrl()... yes
checking for wsetscrreg()... yes
checking for def_prog_mode()... yes
checking for reset_prog_mode()... yes
checking for timeout()... yes
checking for wtimeout()... yes
checking for nodelay()... yes
checking for init_color()... yes
checking for wcolor_set()... yes
checking for use_default_colors()... yes
checking for newpad()... yes
checking for ESCDELAY in ncurses.h... yes
checking for TABSIZE in ncurses.h... yes
checking for COLORS in ncurses.h... yes
checking for COLOR_PAIRS in ncurses.h... yes
checking for function curses_version in ncurses.h... yes
checking for variable curses_version in ncurses.h... no
creating Makefile
make "DESTDIR=" clean
make "DESTDIR="
compiling curses.c
linking shared-object curses.bundle
ld: warning: directory not found for option '-L/Users/mpapis/.sm/pkg/active/lib'
ld: symbol dyld_stub_binding_helper not found, normally in crt1.o/dylib1.o/bundle1.o for architecture x86_64
collect2: error: ld returned 1 exit status
make: *** [curses.bundle] Error 1
make failed, exit code 2
主要錯誤點是找不到符號dyld_stub_binding_helper,網上搜了一下,解決方案是將Xcode中的deployment target從低版本改為高版本,但我這個沒用Xcode編譯啊!想了一下,看上面編譯器用的應該是gcc(4.9),要不用clang試試看呐?!
apple@kissAir: ruby_src$type gcc
gcc is /opt/local/bin/gcc
apple@kissAir: ruby_src$ls -lh /opt/local/bin/gcc
lrwxr-xr-x 1 root admin 39B 10 27 06:15 /opt/local/bin/gcc -> /usr/local/Cellar/gcc/4.9.1/bin/gcc-4.9
apple@kissAir: ruby_src$sudo mv /opt/local/bin/gcc old_gcc
Password:
apple@kissAir: ruby_src$type gcc
gcc is /usr/bin/gcc
apple@kissAir: ruby_src$gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.0.0
Thread model: posix
apple@kissAir: ruby_src$clang -v
Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.0.0
Thread model: posix
現在gcc實際串連在clang上了,遂再次安裝gem:
apple@kissAir: ruby_src$sudo gem install curses
Building native extensions. This could take a while...
Successfully installed curses-1.0.1
Parsing documentation for curses-1.0.1
Installing ri documentation for curses-1.0.1
Done installing documentation for curses after 3 seconds
1 gem installed
哦鳥!看一下匯出的符號:
nm /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin14/curses.bundle
U _COLORS
U _COLOR_PAIRS
U _COLS
U _ESCDELAY
0000000000000732 T _Init_curses
U _LINES
U _TABSIZE
U ___sprintf_chk
U ___stack_chk_fail
U ___stack_chk_guard
U _beep
U _can_change_color
U _cbreak
U _color_content
U _curs_set
U _curses_version
U _def_prog_mode
U _delwin
U _doupdate
U _echo
U _endwin
U _flash
U _getbegx
U _getbegy
U _getcurx
U _getcury
U _getmaxx
U _getmaxy
U _getmouse
U _has_colors
U _idlok
U _init_color
U _init_pair
U _initscr
U _isendwin
U _keyname
U _keypad
U _mouseinterval
U _mousemask
U _mvwin
U _newpad
U _newwin
U _nl
U _nocbreak
U _nodelay
U _noecho
U _nonl
U _noraw
U _pair_content
U _pnoutrefresh
U _prefresh
U _raw
U _rb_ary_new3
U _rb_block_given_p
U _rb_cData
U _rb_cFalseClass
U _rb_cFixnum
U _rb_cFloat
U _rb_cNilClass
U _rb_cObject
U _rb_cSymbol
U _rb_cTrueClass
U _rb_check_typeddata
U _rb_data_typed_object_alloc
U _rb_define_alloc_func
U _rb_define_class_under
U _rb_define_const
U _rb_define_method
U _rb_define_module
U _rb_define_module_function
U _rb_define_module_under
U _rb_eArgError
U _rb_eRuntimeError
U _rb_eSecurityError
U _rb_fix2int
U _rb_gc_register_address
U _rb_gc_unregister_address
U _rb_isprint
U _rb_locale_str_new
U _rb_locale_str_new_cstr
U _rb_num2int
U _rb_num2long
U _rb_num2uint
U _rb_obj_alloc
U _rb_obj_class
U _rb_raise
U _rb_safe_level
U _rb_scan_args
U _rb_secure
U _rb_set_end_proc
U _rb_str_export_locale
U _rb_str_new_cstr
U _rb_string_value
U _rb_string_value_cstr
U _rb_thread_call_without_gvl
U _rb_undef_method
U _rb_yield
U _reset_prog_mode
U _resizeterm
U _ruby_xfree
U _ruby_xmalloc
U _scrollok
U _start_color
U _stdscr
U _subwin
U _ungetch
U _ungetmouse
U _use_default_colors
U _waddch
U _waddnstr
U _wattr_off
U _wattr_on
U _wattrset
U _wbkgd
U _wbkgdset
U _wborder
U _wclear
U _wclrtoeol
U _wcolor_set
U _wdelch
U _wgetch
U _wgetnstr
U _winch
U _winsch
U _winsdelln
U _wmove
U _wnoutrefresh
U _wrefresh
U _wresize
U _wscrl
U _wsetscrreg
U _wtimeout
U dyld_stub_binder
最後把gcc串連給它還原本色吧:
apple@kissAir: ~$gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/4.9.1/libexec/gcc/x86_64-apple-darwin14.0.0/4.9.1/lto-wrapper
Target: x86_64-apple-darwin14.0.0
Configured with: ../configure --build=x86_64-apple-darwin14.0.0 --prefix=/usr/local/Cellar/gcc/4.9.1 --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-4.9 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc --with-cloog=/usr/local/opt/cloog --with-isl=/usr/local/opt/isl --with-system-zlib --enable-version-specific-runtime-libs --enable-libstdcxx-time=yes --enable-stage1-checking --enable-checking=release --enable-lto --disable-werror --with-pkgversion='Homebrew gcc 4.9.1' --with-bugurl=https://github.com/Homebrew/homebrew/issues --enable-plugin --disable-nls --enable-multilib
Thread model: posix
gcc version 4.9.1 (Homebrew gcc 4.9.1)
apple@kissAir: ~$