当我包含&#39; <algorithm>&#39;时崩溃RubyInline和&#39; <vector>&#39;

时间:2016-03-07 16:16:35

标签: c++ ruby

我不明白为什么RubyInline会崩溃。

class CPPCode
    inline do |builder|
        builder.include '<algorithm>'
        builder.include '<vector>'
        builder.c 'int test(){return 1;}'
    end
end

错误:

  

执行错误&#34; gcc -shared -fPIC -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field -initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration -Wdeprecated-declarations -Wno-packed-bitfield-compat -fPIC -L。 -fstack-protector -rdynamic -Wl,-export-dynamic -I /home/lionzxy/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0 -I /home/lionzxy/.rvm/rubies/ ruby-2.3.0 / include / ruby​​-2.3.0 / x86_64-linux -I /home/lionzxy/.rvm/rubies/ruby-2.3.0/include -L / home / lionzxy / .rvm / rubies / ruby​​- 2.3.0 / lib -o \&#34; /home/lionzxy/.ruby_inline/ruby-2.3.0/Inline_Book__CPPCode_232b56c4fe2ef7959c8f3c1f6db3cebb.so \&#34; \&#34; /home/lionzxy/.ruby_inline/ruby-2.3.0/Inline_Book__CPPCode_232b56c4fe2ef7959c8f3c1f6db3cebb.c \&#34; &#34;:pid 24454退出1将/home/lionzxy/.ruby_inline/ruby-2.3.0/Inline_Book__CPPCode_232b56c4fe2ef7959c8f3c1f6db3cebb.c重命名为/home/lionzxy/.ruby_inline/ruby-2.3.0/Inline_Book__CPPCode_232b56c4fe2ef7959c8f3c1f6db3cebb.c.bad

生成的C ++文件:

#include "ruby.h"
#include <algorithm>
#include <vector>

# line 58 "/home/lionzxy/RubymineProjects/app/models/book.rb"
static VALUE test(VALUE self) {
return INT2FIX(1);}


#ifdef __cplusplus
extern "C" {
#endif
void Init_Inline_Book__CPPCode_098f6bcd4621d373cade4e832627b4f6() {
    VALUE c = rb_cObject;
    c = rb_const_get(c, rb_intern("Book"));
    c = rb_const_get(c, rb_intern("CPPCode"));

    rb_define_method(c, "test", (VALUE(*)(ANYARGS))test, 0);

}
#ifdef __cplusplus
}
#endif

1 个答案:

答案 0 :(得分:0)

您尝试使用C ++代码,但是您在没有任何标志的情况下运行gcc,告诉它它是C ++代码。

first documentation page上,我们看到了一个如何使用C ++代码的示例:

require 'inline'
class MyTest
    inline(:C) do |builder|
        builder.include '<iostream>'
        builder.add_compile_flags '-x c++', '-lstdc++'
        builder.c '
            void hello(int i) {
                while (i-- > 0) {
                    std::cout << "hello" << std::endl;
                }
            }'
    end
end

t = MyTest.new()
t.hello(3)

&#34;技巧&#34;这是:

builder.add_compile_flags '-x c++', '-lstdc++'

告诉gcc这是C ++代码。