logo       

Re: Perl calling C calling Ruby (linking problem): msg#01211

lang.ruby.general

Subject: Re: Perl calling C calling Ruby (linking problem)

>>>>> "P" == Peter Munro <peter.munro@xxxxxxxxxxxxxxxxxxxxx> writes:

P> I'm running:
P> Ruby 1.67
P> Perl 5.6.1
P> swig 1.3

Well there is a problem

pigeon% ls
a.pl* regdb.i ruby.i
pigeon%

pigeon% cat regdb.i
%module regdb
%{
#include "ruby.h"
%}
%include ruby.i
pigeon%


pigeon% cat ruby.i
%{
static int initi = 0;
%}

%inline %{

int init(void) {
if (!initi) {
ruby_init();
ruby_init_loadpath();
initi = 1;
}
return 0;
}

char *runruby(char *c) {
VALUE res;
int error = 0;

if (!initi) {
init();
}
res = rb_eval_string_protect(c, &error);
if (error) {
res = rb_gv_get("$!");
}
res = rb_obj_as_string(res);
return RSTRING(res)->ptr;
}

%}

pigeon%


swig was compiled with :

./configure --prefix=/home/ts/local/sw --enable-perl5
--with-ruby=/home/ts/local/r167/bin/ruby

pigeon% ~/local/sw/bin/swig -version

SWIG Version 1.3.14u-20020813-1606
Copyright (c) 1995-1998
University of Utah and the Regents of the University of California
Copyright (c) 1998-2001
University of Chicago

Compiled with CC
pigeon%

pigeon% perl -v

This is perl, v5.6.1 built for i386-linux

Copyright 1987-2001, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'. If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.

pigeon%

pigeon% ~/local/r167/bin/ruby -v
ruby 1.6.7 (2002-03-01) [i686-linux]
pigeon%


pigeon% ~/local/sw/bin/swig -perl regdb.i
pigeon%

pigeon% gcc -c regdb_wrap.c -I/usr/lib/perl/5.6.1/CORE -Dbool=char
-I/home/ts/local/r167/lib/ruby/1.6/i686-linux
In file included from /home/ts/local/r167/lib/ruby/1.6/i686-linux/ruby.h:610,
from regdb_wrap.c:515:
/home/ts/local/r167/lib/ruby/1.6/i686-linux/intern.h:258: warning: `yyparse'
redefined
/usr/lib/perl/5.6.1/CORE/embed.h:756: warning: this is the location of the
previous definition
/home/ts/local/r167/lib/ruby/1.6/i686-linux/intern.h:259: warning: `yylex'
redefined
/usr/lib/perl/5.6.1/CORE/embed.h:755: warning: this is the location of the
previous definition
/home/ts/local/r167/lib/ruby/1.6/i686-linux/intern.h:260: warning: `yyerror'
redefined
/usr/lib/perl/5.6.1/CORE/embed.h:751: warning: this is the location of the
previous definition
pigeon%

pigeon% ld -shared regdb_wrap.o -L/home/ts/local/r167/lib -lruby -ldl -lm
-lcrypt -o regdb.so
pigeon%

pigeon% cat a.pl
#!/usr/bin/perl -l
use regdb;
$res = regdb::runruby("
require 'digest/md5'
Digest::MD5.new('hello')
");
print $res;
pigeon%

pigeon% a.pl
5d41402abc4b2a76b9719d911017c592
pigeon%



Guy Decoux



<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise