2016-03-19 15 views
0

Bir node.js addon örneğini yapılandırmaya ve oluşturmaya çalışıyorum. Örnek node.js belgelere alınmıştır ve CLION bu derlemeye çalışırken kaynak kodu burada Tanımsız başvuruyu v8 hatasına nasıl düzeltebilirim?

https://github.com/nodejs/node-addon-examples/tree/master/8_passing_wrapped/node_0.12

bulunabilir ya da (Ubuntu 14.04 üzerine) ben o I oluşturmak için düğüm gyp kullandığınızda bazı hatalar var tabii:

/home/smorzhov/Documents/clion-2016.1/bin/cmake/bin/cmake --build /home/smorzhov/.CLion2016.1/system/cmake/generated/test4-94ee4803/94ee4803/Debug --target all -- -j 4 
[ 25%] Linking CXX executable test4 
CMakeFiles/test4.dir/myobject.cpp.o: In function `demo::MyObject::Init(v8::Isolate*)': 
/home/smorzhov/ClionProjects/test4/test4/myobject.cpp:26: undefined reference to `v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>, v8::Local<v8::Signature>, int)' 
/home/smorzhov/ClionProjects/test4/test4/myobject.cpp:27: undefined reference to `v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::String::NewStringType, int)' 
/home/smorzhov/ClionProjects/test4/test4/myobject.cpp:27: undefined reference to `v8::FunctionTemplate::SetClassName(v8::Local<v8::String>)' 
/home/smorzhov/ClionProjects/test4/test4/myobject.cpp:28: undefined reference to `v8::FunctionTemplate::InstanceTemplate()' 
/home/smorzhov/ClionProjects/test4/test4/myobject.cpp:28: undefined reference to `v8::ObjectTemplate::SetInternalFieldCount(int)' 
/home/smorzhov/ClionProjects/test4/test4/myobject.cpp:30: undefined reference to `v8::FunctionTemplate::GetFunction()' 
/home/smorzhov/ClionProjects/test4/test4/myobject.cpp:30: undefined reference to `demo::MyObject::constructor' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `v8::PersistentBase<v8::Function>::Reset()': 
/usr/include/node/v8.h:7224: undefined reference to `v8::V8::DisposeGlobal(v8::internal::Object**)' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `v8::PersistentBase<v8::Function>::New(v8::Isolate*, v8::Function*)': 
/usr/include/node/v8.h:7176: undefined reference to `v8::V8::GlobalizeReference(v8::internal::Isolate*, v8::internal::Object**)' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `Reset<v8::Function>': 
/usr/include/node/v8.h:7235: undefined reference to `demo::MyObject::constructor' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `demo::MyObject::New(v8::FunctionCallbackInfo<v8::Value> const&)': 
/home/smorzhov/ClionProjects/test4/test4/myobject.cpp:38: undefined reference to `v8::Value::NumberValue() const' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `v8::Local<v8::Function>::New(v8::Isolate*, v8::PersistentBase<v8::Function> const&)': 
/usr/include/node/v8.h:7124: undefined reference to `demo::MyObject::constructor' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `v8::Local<v8::Function>::New(v8::Isolate*, v8::Function*)': 
/usr/include/node/v8.h:7134: undefined reference to `v8::HandleScope::CreateHandle(v8::internal::Isolate*, v8::internal::Object*)' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `demo::MyObject::New(v8::FunctionCallbackInfo<v8::Value> const&)': 
/home/smorzhov/ClionProjects/test4/test4/myobject.cpp:47: undefined reference to `v8::Function::NewInstance(int, v8::Local<v8::Value>*) const' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `v8::Local<v8::Function>::New(v8::Isolate*, v8::PersistentBase<v8::Function> const&)': 
/usr/include/node/v8.h:7124: undefined reference to `demo::MyObject::constructor' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `v8::Local<v8::Function>::New(v8::Isolate*, v8::Function*)': 
/usr/include/node/v8.h:7134: undefined reference to `v8::HandleScope::CreateHandle(v8::internal::Isolate*, v8::internal::Object*)' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `demo::MyObject::NewInstance(v8::FunctionCallbackInfo<v8::Value> const&)': 
/home/smorzhov/ClionProjects/test4/test4/myobject.cpp:57: undefined reference to `v8::Function::NewInstance(int, v8::Local<v8::Value>*) const' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `ClearWeak<void>': 
/usr/include/node/v8.h:7298: undefined reference to `v8::V8::ClearWeak(v8::internal::Object**)' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `v8::PersistentBase<v8::Object>::Reset()': 
/usr/include/node/v8.h:7224: undefined reference to `v8::V8::DisposeGlobal(v8::internal::Object**)' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `node::ObjectWrap::Wrap(v8::Local<v8::Object>)': 
/usr/include/node/node_object_wrap.h:56: undefined reference to `v8::Object::InternalFieldCount()' 
/usr/include/node/node_object_wrap.h:57: undefined reference to `v8::Object::SetAlignedPointerInInternalField(int, void*)' 
/usr/include/node/node_object_wrap.h:58: undefined reference to `v8::Isolate::GetCurrent()' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `v8::PersistentBase<v8::Object>::Reset()': 
/usr/include/node/v8.h:7224: undefined reference to `v8::V8::DisposeGlobal(v8::internal::Object**)' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `v8::PersistentBase<v8::Object>::New(v8::Isolate*, v8::Object*)': 
/usr/include/node/v8.h:7176: undefined reference to `v8::V8::GlobalizeReference(v8::internal::Isolate*, v8::internal::Object**)' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `SetWeak<v8::Object, node::ObjectWrap>': 
/usr/include/node/v8.h:7257: undefined reference to `v8::V8::MakeWeak(v8::internal::Object**, void*, void (*)(v8::WeakCallbackData<v8::Value, void> const&))' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `ClearWeak<void>': 
/usr/include/node/v8.h:7298: undefined reference to `v8::V8::ClearWeak(v8::internal::Object**)' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `node::ObjectWrap::WeakCallback(v8::WeakCallbackData<v8::Object, node::ObjectWrap> const&)': 
/usr/include/node/node_object_wrap.h:101: undefined reference to `v8::HandleScope::HandleScope(v8::Isolate*)' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `v8::Local<v8::Object>::New(v8::Isolate*, v8::Object*)': 
/usr/include/node/v8.h:7134: undefined reference to `v8::HandleScope::CreateHandle(v8::internal::Isolate*, v8::internal::Object*)' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `v8::PersistentBase<v8::Object>::Reset()': 
/usr/include/node/v8.h:7224: undefined reference to `v8::V8::DisposeGlobal(v8::internal::Object**)' 
CMakeFiles/test4.dir/myobject.cpp.o: In function `node::ObjectWrap::WeakCallback(v8::WeakCallbackData<v8::Object, node::ObjectWrap> const&)': 
/usr/include/node/node_object_wrap.h:108: undefined reference to `v8::HandleScope::~HandleScope()' 
/usr/include/node/node_object_wrap.h:108: undefined reference to `v8::HandleScope::~HandleScope()' 
CMakeFiles/test4.dir/addon.cpp.o: In function `demo::Add(v8::FunctionCallbackInfo<v8::Value> const&)': 
/home/smorzhov/ClionProjects/test4/test4/addon.cpp:27: undefined reference to `v8::Number::New(v8::Isolate*, double)' 
CMakeFiles/test4.dir/addon.cpp.o: In function `demo::InitAll(v8::Local<v8::Object>)': 
/home/smorzhov/ClionProjects/test4/test4/addon.cpp:31: undefined reference to `v8::Object::GetIsolate()' 
CMakeFiles/test4.dir/addon.cpp.o: In function `_register_addon': 
/home/smorzhov/ClionProjects/test4/test4/addon.cpp:37: undefined reference to `node_module_register' 
CMakeFiles/test4.dir/addon.cpp.o: In function `v8::Value::ToObject() const': 
/usr/include/node/v8.h:7778: undefined reference to `v8::Isolate::GetCurrent()' 
/usr/include/node/v8.h:7778: undefined reference to `v8::Isolate::GetCurrentContext()' 
/usr/include/node/v8.h:7779: undefined reference to `v8::Value::ToObject(v8::Local<v8::Context>) const' 
CMakeFiles/test4.dir/addon.cpp.o: In function `demo::MyObject* node::ObjectWrap::Unwrap<demo::MyObject>(v8::Local<v8::Object>)': 
/usr/include/node/node_object_wrap.h:29: undefined reference to `v8::Object::InternalFieldCount()' 
CMakeFiles/test4.dir/addon.cpp.o: In function `v8::Object::GetAlignedPointerFromInternalField(int)': 
/usr/include/node/v8.h:7636: undefined reference to `v8::Object::SlowGetAlignedPointerFromInternalField(int)' 
CMakeFiles/test4.dir/addon.cpp.o: In function `void node::NODE_SET_METHOD<v8::Local<v8::Object> >(v8::Local<v8::Object> const&, char const*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&))': 
/usr/include/node/node.h:239: undefined reference to `v8::Isolate::GetCurrent()' 
/usr/include/node/node.h:240: undefined reference to `v8::HandleScope::HandleScope(v8::Isolate*)' 
/usr/include/node/node.h:242: undefined reference to `v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>, v8::Local<v8::Signature>, int)' 
/usr/include/node/node.h:243: undefined reference to `v8::FunctionTemplate::GetFunction()' 
/usr/include/node/node.h:244: undefined reference to `v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::String::NewStringType, int)' 
/usr/include/node/node.h:245: undefined reference to `v8::Function::SetName(v8::Local<v8::String>)' 
/usr/include/node/node.h:246: undefined reference to `v8::Object::Set(v8::Local<v8::Value>, v8::Local<v8::Value>)' 
/usr/include/node/node.h:246: undefined reference to `v8::HandleScope::~HandleScope()' 
/usr/include/node/node.h:246: undefined reference to `v8::HandleScope::~HandleScope()' 
collect2: error: ld returned 1 exit status 
make[2]: *** [test4] Error 1 
make[1]: *** [CMakeFiles/test4.dir/all] Error 2 
make: *** [all] Error 2 

Belki önemlidir, IDE #include node.h anlamıyorum ve ben #include node/node.h

olarak değiştirmek zorunda

Görünüşe göre, derleyici yalnızca düğüm ve v8 başlıklarını görüyor ve kaynaklarını bulamıyor.

Birisi bunu düzeltmeme yardımcı olabilir mi? Düğüm ve v8 kaynaklarını görmek için derleyici nasıl yapılır?

PS. README takip edip -v bayrağıyla node-gyp kullanırsanız, o derleme görebilirsiniz

cmake_minimum_required(VERSION 3.3) 
project(test4) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(SOURCE_FILES addon.cpp main.cpp myobject.cpp myobject.h) 
add_executable(test4 ${SOURCE_FILES}) 
+0

[README] (https://github.com/nodejs/node-addon-examples/blob/master/README.md) adresini izlemeyi denediniz mi? – Tsyvarev

+0

Başlık dosyasını ** $ {SOURCES_FILES} ** konumundan kaldırın. Dosya zincirinin sırasını değiştirmeye çalışın, bunun gibi bir şey: ** addon.cpp myobject.cpp main.cpp **. Ayrıca unix dünyasında olduğunuzdan, C++ 11 paramınız olarak ** gnu ++ 11 ** kullanmayı deneyin. – Joel

+0

Bu sorun giderilemiyor –

cevap

0

Benim CmakeLists.txt dosyası şöyle görünür:

g++ '-DNODE_GYP_MODULE_NAME=addon' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/home/yannick/.node-gyp/5.9.0/include/node -I/home/yannick/.node-gyp/5.9.0/src -I/home/yannick/.node-gyp/5.9.0/deps/uv/include -I/home/yannick/.node-gyp/5.9.0/deps/v8/include -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -ffunction-sections -fdata-sections -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++0x -MMD -MF ./Release/.deps/Release/obj.target/addon/myobject.o.d.raw -c -o Release/obj.target/addon/myobject.o ../myobject.cc

yüzden biraz daha karmaşık olduğunu Sadece birkaç kaynak belirterek: kullanmanız gereken düğüm sürümüne özgü olan birkaç tane direk vardır ve bir dış bağımlılık içerir (libuv)

Neden README tarafından önerilen oluşturma yöntemlerini kullanmıyorsunuz?

İlgili konular