4

私は、同僚の C ライブラリの Node.js ラッパー モジュールに取り組んでいます。ライブラリは、動的リンク用に共有オブジェクト (.so) 形式で作成されます。

私のCPPモジュールファイルはで始まります

#include "path/to/lib/source/lib.h"

そして、次のwscriptで構築されています

def set_options(ctx):
    ctx.tool_options('compiler_cxx')

def configure(ctx):
    ctx.check_tool('compiler_cxx')
    ctx.check_tool('node_addon')
    ctx.env.append_value('LINKFLAGS', ['-l:lib.so', '-L/path/to/lib.so/'])

def build(ctx):
    t = ctx.new_task_gen('cxx', 'shlib', 'node_addon')
    t.source = ['module.cpp']
    t.target = 'module'

次に、ライブラリを呼び出すモジュールの呼び出しに進むと、次のエラーが発生します。

node: symbol lookup error: <path/to/module.node>:
undefined symbol: <name of library call>

「ldd module.node」を使用してモジュールの依存関係をダンプしようとしましたが、.so ファイルについて言及されていないため、少し疑わしいと感じました。

どんな助けでも大歓迎です!

4

1 に答える 1

1

動的リンカーがライブラリを見つけられるかどうか知っていますか? ライブラリ パスを LD_LIBRARY_PATH に追加してみてください。テスト スクリプトで Node を呼び出す前に、シェルでこれを実行できます。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/lib.so/
node test-script.js

(Mac ではDYLD_LIBRARY_PATH.)

于 2012-04-16T21:16:45.603 に答える