繁体   English   中英

VS2012 Node.js模块:解决LNK2005 / LNK1169错误

[英]VS2012 node.js module: troubleshooting LNK2005/LNK1169 errors

我正在Visual Studio中使用node.js模块,并且具有以下文件结构:

load.h

#include <string>
#include <v8.h>

void property_guard(v8::Local<v8::Object> obj, v8::Local<v8::String> name, const std::string path);

load.cpp

#include "load.h"

void property_guard(v8::Local<v8::Object> obj, v8::Local<v8::String> name, const std::string path) {
    if (!obj->Has(name)) {
        throw path + " does not exist";
    }
}

main.cpp中

#include <string>
#include <node.h>
#include <v8.h>
#include "load.h"

void integer_type_guard(v8::Local<v8::Value> obj, const std::string path) {
    if (!obj->IsInt32()) {
        throw path + " is not an integer";
    }
}

int get_int_property(v8::Local<v8::Object> obj, v8::Local<v8::String> name, const std::string path) {
    property_guard(obj, name, path);
    v8::Local<v8::Value> value = obj->Get(name);
    integer_type_guard(value, path);
    return value->Int32Value();
}

我希望结构是正确的,但是当我使用node-gyp编译项目时,我在Visual Studio中收到类似错误:

error LNK2005: "public: class v8::Object * __cdecl v8::Handle<class v8::Object>::operator->(void)const " (??C?$Handle@VObject@v8@@@v8@@QEBAPEAVObject@1@XZ) already defined in node.lib(node.exe)   C:\...\load.obj
error LNK1169: one or more multiply defined symbols found   C:\...\Test1.dll

从main.cpp include中删除node.h会删除错误(我需要它来注册模块)。 将property_guard方法移动到main.cpp也可以解决此问题。

在这种情况下,将声明移至其他文件的正确方法是什么?

我的环境:

  • Visual Studio 2012
  • node.js 0.10.12 x64

非常感谢来自node.js邮件列表的Bert Belder提供的解决方案 在将其他任何内容添加到.cpp文件之前,我需要添加#include。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM