Ruby-Programmierung: Erweiterung Ruby mit C und C++

Aus Wikibooks

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Im Aufbau der Autor

Zurück zu Ruby-Programmierung Hauptmenü

[Bearbeiten] Ruby erweitern mit c und c++

Da genug Beispiele für Ruby auf Linux-Systemen zu finden sind, bezieht sich der nachfolgende Artikel auf Erweiterung von Ruby mit Hilfe C und C++ auf Windows Systemen.

Da die Entwicklung der Sprachen stetig erfolgen, ist die Version 6 Visual C++ nicht mehr zum Downloaden zu finden. Aber in Büchereien gibt es Bücher mit Demo Version 6 von C++ zum Erlernen der Sprache.

[Bearbeiten] C Programmierenung unter Windows mit Hilfe von Visual C++ Version 6

Mit Editor extconfig.rb erzeugen einige Werte in CONFIG Rubyandc.jpg
CONFIG["CC"] = "cl -nologo"
CONFIG["build_os"] = "mswin32"
CONFIG["CFLAGS"] = "-MD -Zi -O2b2xg- -G6"
CONFIG["CC"] = "cl -nologo"
CONFIG["CC"] = "cl -nologo"
CONFIG["XCFLAGS"] = "-DRUBY_EXPORT -I. -IC:/develop/win/ruby/ruby-1.8.6 -IC:/develop/win/ruby/ruby-1.8.6/missing"
CONFIG["CC"] = "cl -nologo"
CONFIG["CC"] = "cl -nologo"
CONFIG["CC"] = "cl -nologo"
CONFIG["CC"] = "cl -nologo"
SHELL = /bin/sh
 
#### Start of system configuration section. ####
 
srcdir = .
topdir = c:/ruby/lib/ruby/1.8/i386-mswin32
hdrdir = $(topdir)
VPATH = $(srcdir);$(topdir);$(hdrdir)
 
DESTDIR = c:
prefix = $(DESTDIR)/ruby
exec_prefix = $(prefix)
sitedir = $(prefix)/lib/ruby/site_ruby
rubylibdir = $(libdir)/ruby/$(ruby_version)
archdir = $(rubylibdir)/$(arch)
sbindir = $(exec_prefix)/sbin
datadir = $(prefix)/share
includedir = $(prefix)/include
infodir = $(prefix)/info
sysconfdir = $(prefix)/etc
mandir = $(prefix)/man
libdir = $(exec_prefix)/lib
sharedstatedir = $(DESTDIR)/etc
oldincludedir = $(DESTDIR)/usr/include
sitearchdir = $(sitelibdir)/$(sitearch)
localstatedir = $(DESTDIR)/var
bindir = $(exec_prefix)/bin
sitelibdir = $(sitedir)/$(ruby_version)
libexecdir = $(exec_prefix)/libexec
 
CC = cl -nologo
LIBRUBY = $(RUBY_SO_NAME).lib
LIBRUBY_A = $(RUBY_SO_NAME)-static.lib
LIBRUBYARG_SHARED = $(LIBRUBY)
LIBRUBYARG_STATIC = $(LIBRUBY_A)
 
RUBY_EXTCONF_H = 
CFLAGS   =  -MD -Zi -O2b2xg- -G6 
INCFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir)
CPPFLAGS =  
CXXFLAGS = $(CFLAGS) 
DLDFLAGS =  -link -incremental:no -debug -opt:ref -opt:icf -dll $(LIBPATH) -def:$(DEFFILE) -implib:$(*F:.so=)-$(arch).lib -pdb:$(*F:.so=)-$(arch).pdb 
LDSHARED = cl -nologo -LD
AR = lib -nologo
EXEEXT = .exe
 
RUBY_INSTALL_NAME = ruby
RUBY_SO_NAME = msvcrt-ruby18
arch = i386-mswin32
sitearch = i386-msvcrt
ruby_version = 1.8
ruby = c:/ruby/bin/ruby
RUBY = $(ruby:/=\)
RM = $(RUBY) -run -e rm -- -f
MAKEDIRS = @$(RUBY) -run -e mkdir -- -p
INSTALL = @$(RUBY) -run -e install -- -vp
INSTALL_PROG = $(INSTALL) -m 0755
INSTALL_DATA = $(INSTALL) -m 0644
COPY = copy > nul
 
#### End of system configuration section. ####
 
preload = 
 
libpath = $(libdir)
LIBPATH =  -libpath:"$(libdir)"
DEFFILE = 
 
CLEANFILES = 
DISTCLEANFILES = vc*.pdb
 
extout = 
extout_prefix = 
target_prefix = 
LOCAL_LIBS = 
LIBS = $(LIBRUBYARG_SHARED)  oldnames.lib user32.lib advapi32.lib ws2_32.lib  
SRCS = 
OBJS = 
TARGET = 
DLLIB = 
EXTSTATIC = 
STATIC_LIB = 
 
RUBYCOMMONDIR = $(sitedir)$(target_prefix)
RUBYLIBDIR    = $(sitelibdir)$(target_prefix)
RUBYARCHDIR   = $(sitearchdir)$(target_prefix)
 
TARGET_SO     = $(DLLIB)
CLEANLIBS     = $(TARGET).so $(TARGET).il? $(TARGET).tds $(TARGET).map
CLEANOBJS     = *.obj *.lib *.s[ol] *.pdb *.exp *.bak
 
all:		Makefile
static:		$(STATIC_LIB)
 
clean:
		@-$(RM) $(CLEANLIBS:/=\) $(CLEANOBJS:/=\) $(CLEANFILES:/=\)
 
distclean:	clean
		@-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
		@-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES:/=\)
 
realclean:	distclean
install: install-so install-rb
 
install-so: $(RUBYARCHDIR)
install-rb: pre-install-rb install-rb-default
install-rb-default: pre-install-rb-default
pre-install-rb: Makefile
pre-install-rb-default: Makefile
 
site-install: site-install-so site-install-rb
site-install-so: install-so
site-install-rb: install-rb
C Datentypen für RubyObjekte:
INT2NUM(int) Fixnum or Bignum
INT2FIX(int) ) Fixnum (faster)
LONG2NUM(long) Fixnum or Bignum
LONG2FIX(int) Fixnum (faster)
LL2NUM(longlong) ) Fixnum or Bignum (if native systemsupports longlong type)
ULL2NUM(longlong) Fixnum or Bignum (if native systemsupports longlong type)
CHR2FIX(char) Fixnum
rb_str_new2(char *) String
rb_float_new(double) Float


[Bearbeiten] C++ Programmierenung unter Windows mit Hilfe von Visual C++ Version 6 und SWIG

Swig für Windows

Persönliche Werkzeuge