Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法完成Rice(Ruby)的简单示例。我错过了什么?_C++_Ruby_Ruby C Extension - Fatal编程技术网

C++ 无法完成Rice(Ruby)的简单示例。我错过了什么?

C++ 无法完成Rice(Ruby)的简单示例。我错过了什么?,c++,ruby,ruby-c-extension,C++,Ruby,Ruby C Extension,我正在学习ruby Rice的教程。我的最终目标是能够包装一个我已经运行的C++对象,但是从Ruby调用。 在教程之后,我可以创建一个C++类的细部,并调用我定义的方法,但是,一旦我得到了一个预先存在的C++对象的包装,我就得到了一个符号查找错误: cam@Pele:~/localProjects/rubyTest$ ruby extconf.rb creating Makefile cam@Pele:~/localProjects/rubyTest$ make linking shared-o

我正在学习ruby Rice的教程。我的最终目标是能够包装一个我已经运行的C++对象,但是从Ruby调用。

在教程之后,我可以创建一个C++类的细部,并调用我定义的方法,但是,一旦我得到了一个预先存在的C++对象的包装,我就得到了一个符号查找错误:

cam@Pele:~/localProjects/rubyTest$ ruby extconf.rb
creating Makefile
cam@Pele:~/localProjects/rubyTest$ make
linking shared-object Test.so
cam@Pele:~/localProjects/rubyTest$ irb
irb(main):001:0> require './Test'
=> true
irb(main):002:0> test=Test.new
irb: symbol lookup error: /home/cam/localProjects/rubyTest/Test.so: undefined symbol: _ZN4TestC1Ev
extconf.rb:

require 'mkmf-rice'
create_makefile('Test')
测试.cpp

#include "rice/Data_Type.hpp"
#include "rice/Constructor.hpp"

using namespace Rice;

class Test
{
public:
    Test();
    std::string sayHello()
    {
        return std::string("hello");
    }
};

extern "C"
void Init_Test()
{
   Data_Type<Test> rb_cTest = 
    define_class<Test>("Test")
    .define_constructor(Constructor<Test>())
    .define_method("hello", &Test::sayHello);
}
但是我不明白为什么当类来自同一个文件时它是未定义的


我遗漏了什么以及为什么会发生这种情况?

您的构造函数似乎只是被声明为未定义:

类测试
{
公众:
Test()//
    linux-vdso.so.1 =>  (0x00007fff5efff000)
    libruby-1.9.1.so.1.9 => /usr/lib/libruby-1.9.1.so.1.9 (0x00007fd24539b000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd24517e000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fd244e7d000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd244abe000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd2448a8000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fd24469f000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd24449b000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fd244262000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd243f65000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fd2459fb000)
undefined symbol: _ZN4TestC1Ev  (./Test.so)
class Test
{
public:
    Test();   // <- Just declared.
 // ...
};
class Test
{
public:
    Test() {} // <- Now defined
 // ...
};