C++ Node.js加载项中未定义的符号

C++ Node.js加载项中未定义的符号,c++,node.js,v8,C++,Node.js,V8,我在创建Node.js插件时遇到了一个棘手的错误 错误消息: 错误:/media/psf/fluxdb/build/Release/flux.node:未定义的符号:zn4flux20singlyLinkedListRapiie11Constructore 我正在尝试制作一个模板ObjectWrap,以便与各种类型一起重用。代码编译时没有错误,但是当我需要JS中的*.node文件时,我得到一个未定义的符号错误 下面是我的模板类代码: using namespace node; using nam

我在创建Node.js插件时遇到了一个棘手的错误

错误消息:

错误:/media/psf/fluxdb/build/Release/flux.node:未定义的符号:zn4flux20singlyLinkedListRapiie11Constructore

我正在尝试制作一个模板ObjectWrap,以便与各种类型一起重用。代码编译时没有错误,但是当我需要JS中的*.node文件时,我得到一个未定义的符号错误

下面是我的模板类代码:

using namespace node;
using namespace v8;

namespace flux {

    template <typename T>
    class SinglyLinkedListWrap : public ObjectWrap {
    public:
        static void Init(Handle<Object> exports, const char *symbol) {
            // Prepare constructor template
            Local<FunctionTemplate> tpl = FunctionTemplate::New(New);
            tpl->SetClassName(String::NewSymbol(symbol));
            tpl->InstanceTemplate()->SetInternalFieldCount(1);

            // exports
            constructor = Persistent<Function>::New(tpl->GetFunction());
            exports->Set(String::NewSymbol(symbol), constructor);
        }

    protected:
        SinglyLinkedList<T> *list_;

    private:
        SinglyLinkedListWrap() {
            list_ = new SinglyLinkedList<T>();
        }

        ~SinglyLinkedListWrap() {
            delete list_;
        }

        SinglyLinkedList<T> *list() {
            return list_;
        }

        static Persistent<Function> constructor;

        // new SinglyLinkedList or SinglyLinkedList() call
        static Handle<Value> New(const Arguments& args) {
            HandleScope scope;
            if (args.IsConstructCall()) {
                // Invoked as constructor: `new SinglyLinkedList(...)`
                SinglyLinkedListWrap<T> *obj = new SinglyLinkedListWrap<T>();
                obj->Wrap(args.This());
                return scope.Close(args.This());
            } else {
                // Invoked as plain function `SinglyLinkedList(...)`, turn into construct call.
                const int argc = 1;
                Local<Value> argv[argc] = {args[0]};
                return scope.Close(constructor->NewInstance(argc, argv));
            }
        }
    };

}
使用名称空间节点;
使用名称空间v8;
名称空间流量{
样板
类SingleyLinkedListWrap:PublicObjectWrap{
公众:
静态void Init(句柄导出,常量字符*符号){
//准备构造函数模板
本地tpl=FunctionTemplate::新建(新建);
tpl->SetClassName(字符串::NewSymbol(符号));
tpl->InstanceTemplate()->SetInternalFieldCount(1);
//出口
constructor=Persistent::New(tpl->GetFunction());
导出->设置(字符串::NewSymbol(符号),构造函数);
}
受保护的:
SingleLinkedList*列表;
私人:
SingleLinkedListWrap(){
列表=新的SingleLinkedList();
}
~SinglyLinkedListWrap(){
删除列表;
}
SingleLinkedList*列表(){
退货清单;
}
静态持久构造函数;
//新建SinglyLinkedList或SinglyLinkedList()调用
静态句柄新建(常量参数和参数){
手镜镜;
if(args.IsConstructCall()){
//作为构造函数调用:`new SinglyLinkedList(…)`
SinglyLinkedListWrap*obj=新建SinglyLinkedListWrap();
obj->Wrap(args.This());
返回scope.Close(args.This());
}否则{
//作为普通函数“SinglyLinkedList(…)”调用,转换为构造调用。
常数int argc=1;
本地argv[argc]={args[0]};
返回scope.Close(构造函数->新实例(argc,argv));
}
}
};
}

感谢您的帮助:)

我通过删除构造函数引用并直接使用tpl->GetFunction()解决了这个问题