Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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+调用C库时+;(Node.js插件) 我正在研究一个No.js ADDO,需要从C++中包装这些对象,这样它们就可以从客户端JavaScript(用咖啡脚本编写)访问。 < > C++模块编译,但当我试图通过NoDE.jsJavaScript运行时,C库不能用“符号查找错误< /代码>调用,我有调试的问题。_Javascript_C++_C_Node.js_Coffeescript - Fatal编程技术网

获得;符号查找错误“;从C+调用C库时+;(Node.js插件) 我正在研究一个No.js ADDO,需要从C++中包装这些对象,这样它们就可以从客户端JavaScript(用咖啡脚本编写)访问。 < > C++模块编译,但当我试图通过NoDE.jsJavaScript运行时,C库不能用“符号查找错误< /代码>调用,我有调试的问题。

获得;符号查找错误“;从C+调用C库时+;(Node.js插件) 我正在研究一个No.js ADDO,需要从C++中包装这些对象,这样它们就可以从客户端JavaScript(用咖啡脚本编写)访问。 < > C++模块编译,但当我试图通过NoDE.jsJavaScript运行时,C库不能用“符号查找错误< /代码>调用,我有调试的问题。,javascript,c++,c,node.js,coffeescript,Javascript,C++,C,Node.js,Coffeescript,错误如下: node:符号查找错误:/var/lib/cloud9/ledscape wrapper/wrapper/build/Release/wrapper.node:未定义的符号:ledscape_init wrapper.node是已编译的包,ledscape\u init是我试图调用的库中的函数 我试图跟踪代码,并在多个文件中找到相关的代码片段。我放弃了我认为无关的台词 #“AllFade.咖啡” @ledscape=需要“/ledscape.js” @帧[1]=@ledscape.

错误如下:
node:符号查找错误:/var/lib/cloud9/ledscape wrapper/wrapper/build/Release/wrapper.node:未定义的符号:ledscape_init

wrapper.node
是已编译的包,
ledscape\u init
是我试图调用的库中的函数

我试图跟踪代码,并在多个文件中找到相关的代码片段。我放弃了我认为无关的台词

#“AllFade.咖啡”
@ledscape=需要“/ledscape.js”
@帧[1]=@ledscape.LedscapeInit()
#“Ledscape.咖啡”
包装器=需要“/build/Release/wrapper”
module.exports=包装器
wrapper.cc

extern "C" {
#include <ledscape.h>
}
#include <node.h>
#include <v8.h>
#include <node_object_wrap.h>
#include "LedscapeWrapper.h"

Handle<Value> LedscapeInit(const Arguments& args) {
    HandleScope scope;
    return scope.Close(LedscapeWrapper::NewInstance(args));
}

void InitAll(Handle<Object> exports, Handle<Object> module) {
    LedscapeWrapper::Init(module);
    NODE_SET_METHOD(exports, "LedscapeInit", LedscapeInit);
}

NODE_MODULE(wrapper, InitAll)
我认为问题在于对LedscapeWrapper.cpp中的
ledscape\u init()
的调用之一,它无法找到库(),但我主要不是一名C/C++开发人员


我试图从GNU或Node查看
nm
工具,但它拒绝检查
.Node
文件,并且我在网上找不到任何使用指针。

您是否尝试使用
“库”直接链接静态/动态库:[“/opt/ledscape/ledscape.a”]
(或
ledscape.so
)没有使用
链接设置
?@mscdex,而是没有任何扩展名为
.a
的文件。这些是自动生成的吗?(对不起,我对C/C++没有太多经验)您是先编译ledscape的吗?否则,您可能需要为ledscape创建一个gyp文件,然后将binding.gyp作为依赖项指向该文件。如果没有手动编译或设置依赖项gyp文件,ledscape不会链接到您的应用程序(静态或动态),因此缺少符号。@mscdex很抱歉延迟<代码>“库”:[“/opt/LED/LEDScape/LEDScape.o”
修复了第一个问题,但随后我得到了
未定义的符号:pru_init
,它
/opt/LED/LEDScape/LEDScape.h
包含在
pru.h
中<代码>“库”:[“/opt/LED/LEDScape/LEDScape.o”,“/opt/LED/LEDScape/pru.o”]修复了该问题,但导致
未定义的符号:prussdrv\u init
。有没有比包含更多依赖项更好的方法来修复这些问题?
extern "C" {
#include <ledscape.h>
}
#include <node.h>
#include <node_object_wrap.h>
using namespace v8;

class LedscapeWrapper : public node::ObjectWrap {
    public:
        static void Init(v8::Handle<v8::Object> exports);
        static Handle<Value> NewInstance(const Arguments& args);
        inline ledscape_t* value() const { return value_; }
    private:
        explicit LedscapeWrapper(ledscape_t* value = ledscape_init(1));
        ~LedscapeWrapper();
        static Handle<Value> New(const Arguments& args);
        static v8::Persistent<v8::Function> constructor;
        ledscape_t* value_;
};
extern "C" {
#include <ledscape.h>
}
#include <node.h>
#include "LedscapeWrapper.h"
using namespace v8;

void LedscapeWrapper::Init(Handle<Object> exports) {
    Local<FunctionTemplate> tpl = FunctionTemplate::New(New);
    tpl->SetClassName(String::NewSymbol("LedscapeWrapper"));
    tpl->InstanceTemplate()->SetInternalFieldCount(1);
    constructor = Persistent<Function>::New(tpl->GetFunction());
    exports->Set(String::NewSymbol("LedscapeWrapper"), constructor);
}

Handle<Value> LedscapeWrapper::New(const Arguments& args) {
    HandleScope scope;
    if(args.IsConstructCall()) {
        ledscape_t* ledscape = ledscape_init(args[0]->NumberValue());
        LedscapeWrapper* obj = new LedscapeWrapper(ledscape);
        obj->Wrap(args.This());
        return args.This();
    }
    else {
        const int argc = 1;
        Local<Value> argv[argc] = { args[0] };
        return scope.Close(constructor->NewInstance(argc, argv));
    }
}

Handle<Value> LedscapeWrapper::NewInstance(const Arguments& args) {
    HandleScope scope;
    const int argc = 1;
    Handle<Value> argv[argc] = { args[0] };
    Local<Object> instance = constructor->NewInstance(argc, argv);
    return scope.Close(instance);
}
{
  "targets": [{
    "target_name": "wrapper",
    "sources": ["wrapper.cc","LedscapeWrapper.cpp","LedscapeFrameWrapper.cpp"],
    'include_dirs': ['/opt/ledscape/'],
    'link_settings': {  'library_dirs': ['/opt/ledscape']  },
  }],
}