I tried to compile the following library and everything went smooth until the last step.
/* File : computation.c */
int add(int x, int y) {
return x + y;
}
/* File: computation.i */
%module computation
extern int add(int x, int y);
$ swig -ruby computation.i
$ gcc -c computation.c
$ gcc -c computation_wrap.c -I/opt/local/lib/ruby/1.8/i686-darwin10
$ gcc -shared computation.o computation_wrap.o -o computation.so
Undefined symbols:
"_rb_str_cat", referenced from:
_Ruby_Format_TypeError in computation_wrap.o
"_rb_exc_new3", referenced from:
_SWIG_Ruby_ExceptionType in computation_wrap.o
"_rb_define_class_under", referenced from:
_SWIG_Ruby_define_class in computation_wrap.o
_SWIG_Ruby_define_class in computation_wrap.o
[...]
ld: symbol(s) not found
collect2: ld returned 1 exit status
My configuration:
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.6.3
BuildVersion: 10D575
$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10]
$ swig -version
SWIG V开发者_StackOverflow中文版ersion 1.3.40
Compiled with /usr/bin/g++-4.2 [i386-apple-darwin10.3.0]
$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646)
Try the following flags for compiling the shared object:
$ gcc -bundle -flat_namespace -undefined suppress computation.o computation_wrap.o -o computation.so
You also may need to add "-arch i386" since it looks like you're running 32-bit Ruby on Snow Leopard.
精彩评论