Skip to content

dyld: Symbol not found: _RUBY_MARK_ENTER #8

Closed
wulffeld opened this Issue Dec 11, 2012 · 5 comments

5 participants

@wulffeld

Hi

OS X ML
Using MacPorts
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin12]

Trying to use this with the better_errors gem. The gem installs but trying to start a rails console results in a crash.

dyld: lazy symbol binding failed: Symbol not found: _RUBY_MARK_ENTER
  Referenced from: /Users/m/.bundler/gems/binding_of_caller-0.6.8/lib/binding_of_caller.bundle
  Expected in: flat namespace

dyld: Symbol not found: _RUBY_MARK_ENTER
  Referenced from: /Users/m/.bundler/gems/binding_of_caller-0.6.8/lib/binding_of_caller.bundle
  Expected in: flat namespace

Trace/BPT trap: 5

The generated Makefile:


SHELL = /bin/sh

# V=0 quiet, V=1 verbose.  other values don't work.
V = 0
Q1 = $(V:1=)
Q = $(Q1:0=@)
n=$(NULLCMD)
ECHO1 = $(V:1=@$n)
ECHO = $(ECHO1:0=@echo)

#### Start of system configuration section. ####

srcdir = .
topdir = /opt/local/include/ruby-1.9.1
hdrdir = /opt/local/include/ruby-1.9.1
arch_hdrdir = /opt/local/include/ruby-1.9.1/$(arch)
VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
prefix = $(DESTDIR)/opt/local
rubylibprefix = $(DESTDIR)/opt/local/lib/ruby1.9
exec_prefix = $(prefix)
vendorhdrdir = $(rubyhdrdir)/vendor_ruby
sitehdrdir = $(rubyhdrdir)/site_ruby
rubyhdrdir = $(includedir)/$(RUBY_BASE_NAME)-$(ruby_version)
vendordir = $(rubylibprefix)/vendor_ruby
sitedir = $(rubylibprefix)/site_ruby
ridir = $(datarootdir)/$(RI_BASE_NAME)
mandir = $(DESTDIR)/opt/local/share/man
localedir = $(datarootdir)/locale
libdir = $(exec_prefix)/lib
psdir = $(docdir)
pdfdir = $(docdir)
dvidir = $(docdir)
htmldir = $(docdir)
infodir = $(datarootdir)/info
docdir = $(datarootdir)/doc/$(PACKAGE)
oldincludedir = $(DESTDIR)/usr/include
includedir = $(prefix)/include
localstatedir = $(prefix)/var
sharedstatedir = $(prefix)/com
sysconfdir = $(prefix)/etc
datadir = $(datarootdir)
datarootdir = $(prefix)/share
libexecdir = $(exec_prefix)/libexec
sbindir = $(exec_prefix)/sbin
bindir = $(exec_prefix)/bin
rubylibdir = $(rubylibprefix)/$(ruby_version)
archdir = $(rubylibdir)/$(arch)
sitelibdir = $(sitedir)/$(ruby_version)
sitearchdir = $(sitelibdir)/$(sitearch)
vendorlibdir = $(vendordir)/$(ruby_version)
vendorarchdir = $(vendorlibdir)/$(sitearch)

NULLCMD = :

CC = /usr/bin/clang
CXX = /usr/bin/clang++
LIBRUBY = $(LIBRUBY_SO)
LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
empty =
OUTFLAG = -o $(empty)
COUTFLAG = -o $(empty)

RUBY_EXTCONF_H = 
cflags   =  $(optflags) $(debugflags) $(warnflags)
optflags = -O3
debugflags = -ggdb
warnflags = -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration
CFLAGS   = -fno-common -pipe -O2  -arch x86_64 -fno-common -O0 -std=c99 -I./ruby_headers/193/ -DRUBY_193 $(ARCH_FLAG)
INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
DEFS     = 
CPPFLAGS =  -I/opt/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE $(DEFS) $(cppflags) -I/opt/local/include
CXXFLAGS = $(CFLAGS) -pipe -O2
ldflags  = -L. -L/opt/local/lib  -arch x86_64 -L/opt/local/lib 
dldflags = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -Wl,-flat_namespace -L/opt/local/lib 
ARCH_FLAG =  -arch x86_64
DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG)
LDSHARED = $(CC) -dynamic -bundle
LDSHAREDXX = $(CXX) -dynamic -bundle
AR = ar
EXEEXT = 

RUBY_BASE_NAME = ruby
RUBY_INSTALL_NAME = ruby1.9
RUBY_SO_NAME = ruby.1.9.1
arch = x86_64-darwin12
sitearch = $(arch)
ruby_version = 1.9.1
ruby = /opt/local/bin/ruby1.9
RUBY = $(ruby)
RM = rm -f
RM_RF = $(RUBY) -run -e rm -- -rf
RMDIRS = rmdir -p
MAKEDIRS = mkdir -p
INSTALL = /usr/bin/install -c
INSTALL_PROG = $(INSTALL) -m 0755
INSTALL_DATA = $(INSTALL) -m 644
COPY = cp
TOUCH = exit >

#### End of system configuration section. ####

preload = 

libpath = . $(libdir) /opt/local/lib
LIBPATH =  -L. -L$(libdir) -L/opt/local/lib
DEFFILE = 

CLEANFILES = mkmf.log
DISTCLEANFILES = 
DISTCLEANDIRS = 

extout = 
extout_prefix = 
target_prefix = 
LOCAL_LIBS = 
LIBS = $(LIBRUBYARG_SHARED)  -lpthread -ldl -lobjc 
SRCS = binding_of_caller.c
OBJS = binding_of_caller.o
TARGET = binding_of_caller
DLLIB = $(TARGET).bundle
EXTSTATIC = 
STATIC_LIB = 

BINDIR        = $(bindir)
RUBYCOMMONDIR = $(sitedir)$(target_prefix)
RUBYLIBDIR    = $(sitelibdir)$(target_prefix)
RUBYARCHDIR   = $(sitearchdir)$(target_prefix)
HDRDIR        = $(rubyhdrdir)/ruby$(target_prefix)
ARCHHDRDIR    = $(rubyhdrdir)/$(arch)/ruby$(target_prefix)

TARGET_SO     = $(DLLIB)
CLEANLIBS     = $(TARGET).bundle 
CLEANOBJS     = *.o  *.bak

all:    $(DLLIB)
static: $(STATIC_LIB)
.PHONY: all install static install-so install-rb
.PHONY: clean clean-so clean-rb

clean-rb-default::
clean-rb::
clean-so::
clean: clean-so clean-rb-default clean-rb
        @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)

distclean-rb-default::
distclean-rb::
distclean-so::
distclean: clean distclean-so distclean-rb-default distclean-rb
        @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
        @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
        @-$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true

realclean: distclean
install: install-so install-rb

install-so: $(RUBYARCHDIR)/$(DLLIB)
$(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
    -$(Q)$(MAKEDIRS) $(@D)
    $(INSTALL_PROG) $(DLLIB) $(@D)
clean-static::
    -$(Q)$(RM) $(STATIC_LIB)
install-rb: pre-install-rb install-rb-default
install-rb-default: pre-install-rb-default
pre-install-rb: Makefile
pre-install-rb-default: Makefile
pre-install-rb-default:
    $(ECHO) installing default binding_of_caller libraries
./.RUBYARCHDIR.time:
    $(Q) $(MAKEDIRS) $(RUBYARCHDIR)
    $(Q) $(TOUCH) $@

site-install: site-install-so site-install-rb
site-install-so: install-so
site-install-rb: install-rb

.SUFFIXES: .c .m .cc .mm .cxx .cpp .C .o

.cc.o:
    $(ECHO) compiling $(<)
    $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<

.mm.o:
    $(ECHO) compiling $(<)
    $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<

.cxx.o:
    $(ECHO) compiling $(<)
    $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<

.cpp.o:
    $(ECHO) compiling $(<)
    $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<

.C.o:
    $(ECHO) compiling $(<)
    $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<

.c.o:
    $(ECHO) compiling $(<)
    $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<

.m.o:
    $(ECHO) compiling $(<)
    $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<

$(DLLIB): $(OBJS) Makefile
    $(ECHO) linking shared-object $(DLLIB)
    -$(Q)$(RM) $(@)
    $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)



$(OBJS): $(hdrdir)/ruby.h $(hdrdir)/ruby/defines.h $(arch_hdrdir)/ruby/config.h

When trying a manual make:

~/.bundler/gems/binding_of_caller-0.6.8/ext/binding_of_caller$ make clean && make
compiling binding_of_caller.c
binding_of_caller.c:40:3: warning: implicit declaration of function 'RUBY_FREE_ENTER' is invalid in C99 [-Wimplicit-function-declaration]
  RUBY_FREE_ENTER("binding");
  ^
binding_of_caller.c:45:3: warning: implicit declaration of function 'RUBY_FREE_LEAVE' is invalid in C99 [-Wimplicit-function-declaration]
  RUBY_FREE_LEAVE("binding");
  ^
binding_of_caller.c:52:3: warning: implicit declaration of function 'RUBY_MARK_ENTER' is invalid in C99 [-Wimplicit-function-declaration]
  RUBY_MARK_ENTER("binding");
  ^
binding_of_caller.c:55:5: warning: implicit declaration of function 'RUBY_MARK_UNLESS_NULL' is invalid in C99 [-Wimplicit-function-declaration]
    RUBY_MARK_UNLESS_NULL(bind->env);
    ^
binding_of_caller.c:62:3: warning: implicit declaration of function 'RUBY_MARK_LEAVE' is invalid in C99 [-Wimplicit-function-declaration]
  RUBY_MARK_LEAVE("binding");
  ^
5 warnings generated.
linking shared-object binding_of_caller.bundle

I've spent some hours looking at this (mostly looking) and am stumped.

@crazymykl

It's failing to properly include gc.h. Try taking the contents of that file and replacing the include line with the contents, see if that works. If so, it's an issue with paths in the Makefile.

@graudeejs

I'm having similar issue on FreeBSD 9.0

/home/graudeejs/.rvm/gems/ruby-1.9.3-p327@siltumtehnika/gems/binding_of_caller-0.6.8/lib/binding_of_caller.so: Undefined symbol "RUBY_MARK_ENTER"
@AaronThornton00 AaronThornton00 referenced this issue in loomio/loomio Feb 17, 2013
Closed

Include better errors in gemfile #476

@cabo
cabo commented Feb 27, 2013

See #13

@wulffeld
wulffeld commented Apr 4, 2013

I just upgraded to:

gem 'better_errors',             '0.7.2'
gem 'binding_of_caller',         '0.7.1'

and I'm no longer seeing the error.

@badosu badosu closed this in #17 Jun 3, 2013
@badosu
Collaborator
badosu commented Jun 3, 2013

This bug must have been fixed by #8

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.