大津です。

詳しい動作環境がわからないのですが、自分の手元の環境(node-v0.6.11, Ubuntu 11.10, 32bit) では正常に動作してますね。

unix:~/tmp/nodejs_jp/test> node ./fork.js
3.14
3.14

Unix環境だと node の require() で呼ばれる dlopen(3)
はエラーメッセージを返さないので、そのままでは読み込みエラーの原因を直接特定するのは難しいですね。 (私も以前ハマりました。)

もし node のソースに直接手を加えられるなら deps/uv/src/unix/dl.c:35 の uv_dlopen()
のエラー処理のところで dlerror() を入れ込んで、その出力を見てみるともうちょっと詳細にエラー原因がわかると思います。

2012年2月21日18:50 akito12 <[email protected]>:
> はじめまして、内山と申します。
> 値が返るだけの簡単な自作addonをnode ver.0.6.12 で試しています。
> ところがchild process.fork()のsubで呼ばれる方でrequireするとUnable to load shared
> libraryが出てしまいます。
> 同じ経験もしくは解決方法をご存じの方がいらっしゃれば教えていただけたらと思います。
>
> 以下ソース
>
> [addon.cc]
> --------------------------------------------------------------------------------------
> #include <v8.h>
> #include <node.h>
> using namespace v8;
> Handle<Value> TEST1 (const Arguments& args) {
>        HandleScope scope;
>        double      data=3.14;
>        return Number::New((double)data);
> }
> extern "C" void init (Handle<Object> target) {
>  HandleScope scope;
>  NODE_SET_METHOD(target, "uchi_test", TEST1);
> }
> --------------------------------------------------------------------------------------
>
> [fork.js]
> ------------------------------------------------------------------
> var cp = require('child_process');
> var n = cp.fork(__dirname + '/sub.js');
> ------------------------------------------------------------------
>
> [sub.js]
> ---------------------------------------------------------------------------------
> var pv = require('./build/Release/addon');
> setInterval(function(){
>        console.log(pv.uchi_test()); <-- sub.js単体で動作させるとconsole.logは無事出力
> },1000);
> ---------------------------------------------------------------------------------
>
> % node fork.js
> Error: Unable to load shared library /root/uchi/node/add_on_test/build/
> Release/addon.node
>
> 宜しくお願い致します。

メールによる返信