体系结构的未定义符号 x86_64:“_rb_funcallv”
Undefined symbols for architecture x86_64: "_rb_funcallv"
我正在尝试从 C 调用 Ruby,但出于某种原因我无法执行 rb_funcall2
或 rb_funcall3
。然而 rb_funcall
有效。
我的例子,
Hello.c
#include <ruby.h>
void hello_from_ruby()
{
if (ruby_setup())
{
fprintf(stderr, "Failed to init Ruby VM\n");
}
rb_require("/test");
rb_funcall2(0, rb_intern("some_ruby_method"), 0, NULL);
ruby_cleanup(0);
}
int main(int argc, char* argv[])
{
hello_from_ruby();
return 0;
}
test.rb
def some_ruby_method
puts "Hello from ruby"
end
执行的命令:
clang hello.c -o hello -I/opt/rubies/2.1.0/include/ruby-2.1.0 -I/opt/rubies/2.1.0/include/ruby-2.1.0/x86_64-darwin14.0 -lruby
异常:
Undefined symbols for architecture x86_64:
"_rb_funcallv", referenced from:
_hello_from_ruby in hello-190761.o
ld: symbol(s) not found for architecture x86_64
出于某种原因,只有这两种方法没有被 linked。
谢谢
我的问题:我如何 link rb_funcall2
我的代码
问题是我的 Ruby 是使用 gcc
编译的,所以我不得不为 clang 重新编译:
CC=clang CONFIGURE_OPTS="--with-gcc=clang --enable-shared" ruby-build 2.1.0 /opt/rubies/2.1.0
看了这个问题我明白了:https://github.com/ryanmelt/qtbindings/issues/72
谢谢。
我正在尝试从 C 调用 Ruby,但出于某种原因我无法执行 rb_funcall2
或 rb_funcall3
。然而 rb_funcall
有效。
我的例子,
Hello.c
#include <ruby.h>
void hello_from_ruby()
{
if (ruby_setup())
{
fprintf(stderr, "Failed to init Ruby VM\n");
}
rb_require("/test");
rb_funcall2(0, rb_intern("some_ruby_method"), 0, NULL);
ruby_cleanup(0);
}
int main(int argc, char* argv[])
{
hello_from_ruby();
return 0;
}
test.rb
def some_ruby_method
puts "Hello from ruby"
end
执行的命令:
clang hello.c -o hello -I/opt/rubies/2.1.0/include/ruby-2.1.0 -I/opt/rubies/2.1.0/include/ruby-2.1.0/x86_64-darwin14.0 -lruby
异常:
Undefined symbols for architecture x86_64:
"_rb_funcallv", referenced from:
_hello_from_ruby in hello-190761.o
ld: symbol(s) not found for architecture x86_64
出于某种原因,只有这两种方法没有被 linked。 谢谢
我的问题:我如何 link rb_funcall2
我的代码
问题是我的 Ruby 是使用 gcc
编译的,所以我不得不为 clang 重新编译:
CC=clang CONFIGURE_OPTS="--with-gcc=clang --enable-shared" ruby-build 2.1.0 /opt/rubies/2.1.0
看了这个问题我明白了:https://github.com/ryanmelt/qtbindings/issues/72
谢谢。