Compiling c program using rb_eval_string()


#1

I tried to call rb_eval_string(), so I wrote simple C code.

#include “/home/xopht/lib/1.8/i686-linux/ruby.h”

int main()
{
rb_eval_string( “puts” );
return 0;
}

I compiled it and get bellow result.

[xopht@odin ruby]$ g++ -o test test.cc -lruby-static -L/home/xopht/lib/
/home/xopht/lib//libruby-static.a(string.o)(.text+0x319a): In function
rb_str_crypt': /home/xopht/ruby/ruby-1.8.4/string.c:4360: undefined reference tocrypt’
/home/xopht/lib//libruby-static.a(dln.o)(.text+0x9f): In function
dln_load': /home/xopht/ruby/ruby-1.8.4/dln.c:1351: undefined reference todlopen’
/home/xopht/lib//libruby-static.a(dln.o)(.text+0xb6):/home/xopht/ruby/ruby-1.8.4/dln.c:1356:
undefined reference to dlsym' /home/xopht/lib//libruby-static.a(dln.o)(.text+0x12b):/home/xopht/ruby/ruby-1.8.4/dln.c:1359: undefined reference todlclose’
/home/xopht/lib//libruby-static.a(dln.o)(.text+0x5): In function
dln_strerror': /home/xopht/ruby/ruby-1.8.4/dln.c:1193: undefined reference todlerror’
collect2: ld returned 1 exit status
[xopht@odin ruby]$

what’s wrong?


#2

On 2/23/06, removed_email_address@domain.invalid removed_email_address@domain.invalid wrote:

I compiled it and get bellow result.
undefined reference to `dlsym’

rb_string_eval() needs to be initialized properly.
Check this,
http://phrogz.net/ProgrammingRuby/ext_ruby.html#extendingruby
http://www.rubygarden.org/ruby?EmbedRuby


#3

On 2/23/06, Gyoung-Yoon N. removed_email_address@domain.invalid wrote:

/home/xopht/lib//libruby-static.a(dln.o)(.text+0xb6):/home/xopht/ruby/ruby-1.8.4/dln.c:1356:
what’s wrong?
http://nohmad.sub-port.net

Ouch,

s/rb_string_eval/rb_eval_string/

Sorry for noise.


#4

i also got the same error.
bye :slight_smile:
Ashish


#5

You guys are really helpful !!

I changed my code…

int main()
{
ruby_init();
rb_eval_string( “puts” );
return 0;

}

and compiled it.

[xopht@odin ruby]$ g++ -o test test.cc -lruby-static -L/home/xopht/lib/
-lcrypt -ldl

now it works correctly !!

thanks a lot !!


#6

I compiled it and get bellow result.

This is in your C compiler. You probably need to add some library flags
like
“-lcrypt -ldl” or others in order for the linker to be happy.