2013-09-23 2 views
3

Я делаю аддон nodejs. У меня есть 5 файлов в моей визуальной студии проекта:Ошибки компоновщика Уже определены

comm.h/cc, node_main.cc, util.h/cc 

связать его с библиотекой node.lib

node_main.cc имеет функцию:

v8::Handle<v8::Value> StartMethod(const v8::Arguments &args) { 
    v8::HandleScope scope(args.GetIsolate()); // node_isolate 
    int length = args.Length(); 
    std::vector<std::unique_ptr<char[]>> argv; 
    for(int i=0;i<length;++i) { 
     if(args[i]->IsString()) { 
      v8::String::Utf8Value str(args[i]); 
      const int strLen = ToCStringLen(str); 
      if(strLen) { 
       std::unique_ptr<char []> data(new char[strLen+1]); 
       strcpy_s(data.get(), strLen+1, ToCString(str)); 
       argv.push_back(std::move(data)); 
      } 
     } 
    } 
    return scope.Close(v8::Int32::New(MainMethod(argv.size(), &(argv[0]._Myptr)))); 
} 

Когда я построить решение я получаю следующее ошибки линкера:

1>node.lib(node.exe) : error LNK2005: "public: bool __thiscall v8::Value::IsString(void)const " ([email protected]@[email protected]@QBE_NXZ) already defined in communicator.obj 
1>node.lib(node.exe) : error LNK2005: "public: class v8::Local<class v8::Value> __thiscall v8::Arguments::operator[](int)const " ([email protected]@@[email protected]@[email protected]@@[email protected]@Z) already defined in communicator.obj 
1>node.lib(node.exe) : error LNK2005: "public: int __thiscall v8::Arguments::Length(void)const " ([email protected]@[email protected]@QBEHXZ) already defined in communicator.obj 
1>node.lib(node.exe) : error LNK2005: "public: class v8::Isolate * __thiscall v8::Arguments::GetIsolate(void)const " ([email protected]@[email protected]@[email protected]@XZ) already defined in communicator.obj 

функция IsString(), Arguments::[] and GetIsolate() является использование d только в hello.cc и Arguments::Length() используются в communicator.cc. Даже тогда все ошибки относятся к communicator.cc.

Я только называю функции в файлах cc, не давая никакого нового определения.

В чем проблема?

Заранее спасибо.

+0

Вы включаете один файл .cc в другой? – john

+0

@john Нет, я не включаю файл .cc в любом месте своего проекта. –

+0

Perhap вы определяете эти функции в файле заголовка и не говорите, что они встроены? Есть только несколько вещей, которые могут вызвать эту ошибку, но, не имея возможности увидеть весь ваш код и посмотреть, как ваши проекты настроены, очень сложно сказать, в чем проблема. Независимо от того, что это ничего не осложняет, просто некоторые основные ошибки в том, как вы написали код или создали свои проекты. – john

ответ

3

У меня была та же проблема, я нашел решение here. Поместите #include <node.h> перед каждым #include <v8.h>.

Смежные вопросы