I'm working on making Gentoo Linux's nodejs package compile against system v8:
http://bugs.gentoo.org/show_bug.cgi?id=348609Passing --shared-v8 to node results in the following error (full log attached to the bug above):
/var/tmp/portage/net-libs/nodejs-0.3.1/work/node-v0.3.1/build/../src/node_buffer.cc:635: undefined reference to `v8::Object::GetIndexedPropertiesExternalArrayDataType()'
/var/tmp/portage/net-libs/nodejs-0.3.1/work/node-v0.3.1/build/../src/node_buffer.cc:635: undefined reference to `v8::Object::GetIndexedPropertiesExternalArrayDataType()'
/var/tmp/portage/net-libs/nodejs-0.3.1/work/node-v0.3.1/build/../src/node_buffer.cc:635: undefined reference to `v8::Object::GetIndexedPropertiesExternalArrayDataType()'
/var/tmp/portage/net-libs/nodejs-0.3.1/work/node-v0.3.1/build/../src/node_buffer.cc:635: undefined reference to `v8::Object::GetIndexedPropertiesExternalArrayDataType()'
/var/tmp/portage/net-libs/nodejs-0.3.1/work/node-v0.3.1/build/../src/node_buffer.cc:635: undefined reference to `v8::Object::GetIndexedPropertiesExternalArrayDataType()'
default/src/node_buffer_3.o: In function `node::Buffer::Data(v8::Handle<v8::Object>)':
/var/tmp/portage/net-libs/nodejs-0.3.1/work/node-v0.3.1/build/../src/node_buffer.cc:140: undefined reference to `v8::Object::GetIndexedPropertiesExternalArrayData()'
default/src/node_buffer_3.o: In function `node::Buffer::HasInstance(v8::Handle<v8::Value>)':
/var/tmp/portage/net-libs/nodejs-0.3.1/work/node-v0.3.1/build/../src/node_buffer.cc:635: undefined reference to `v8::Object::GetIndexedPropertiesExternalArrayDataType()'
default/src/node_buffer_3.o: In function `node::Buffer::Length(v8::Handle<v8::Object>)':
/var/tmp/portage/net-libs/nodejs-0.3.1/work/node-v0.3.1/build/../src/node_buffer.cc:147: undefined reference to `v8::Object::GetIndexedPropertiesExternalArrayDataLength()'
/var/tmp/portage/net-libs/nodejs-0.3.1/work/node-v0.3.1/build/../src/node_buffer.cc:147: undefined reference to `v8::Object::GetIndexedPropertiesExternalArrayDataLength()'
default/src/node_buffer_3.o: In function `node::Buffer::Data(v8::Handle<v8::Object>)':
/var/tmp/portage/net-libs/nodejs-0.3.1/work/node-v0.3.1/build/../src/node_buffer.cc:140: undefined reference to `v8::Object::GetIndexedPropertiesExternalArrayData()'
collect2: ld returned 1 exit status
nodejs builds its bundled v8 with visibility=default, which also "fixes" the problem for shared build. However, I'm not sure if that's a good idea, so I created a patch to make those symbols exported instead:
http://bugs.gentoo.org/attachment.cgi?id=258953
--- include/v8.h.orig 2011-01-05 17:57:32.000000000 +0100
+++ include/v8.h 2011-01-05 17:57:58.000000000 +0100
@@ -1647,9 +1647,9 @@
ExternalArrayType array_type,
int number_of_elements);
bool HasIndexedPropertiesInExternalArrayData();
- void* GetIndexedPropertiesExternalArrayData();
- ExternalArrayType GetIndexedPropertiesExternalArrayDataType();
- int GetIndexedPropertiesExternalArrayDataLength();
+ V8EXPORT void* GetIndexedPropertiesExternalArrayData();
+ V8EXPORT ExternalArrayType GetIndexedPropertiesExternalArrayDataType();
+ V8EXPORT int GetIndexedPropertiesExternalArrayDataLength();
V8EXPORT static Local<Object> New();
static inline Object* Cast(Value* obj);
What do you think? Is that the correct solution, or maybe should nodejs stop using those non-exported calls?