我正在使用 Visual Studio 中的 node.js 模块并具有以下文件结构:
加载.h
#include <string>
#include <v8.h>
void property_guard(v8::Local<v8::Object> obj, v8::Local<v8::String> name, const std::string path);
加载.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";
}
}
主文件
#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 中删除 node.h 包括删除错误(我需要它来注册模块)。将 property_guard 方法移至 main.cpp 也解决了这个问题。
在这种情况下,将声明移动到其他文件的正确方法是什么?
我的环境:
- 视觉工作室 2012
- node.js 0.10.12 x64