Модуль Node.js - добавление зависимости от ссылки - PullRequest
4 голосов
/ 11 февраля 2012

Я работаю над модулем оболочки Node.js для библиотеки C коллег. Библиотека создается в форме Shared Object (.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.

Любая помощь очень ценится!

1 Ответ

1 голос
/ 17 апреля 2012

Знаете ли вы, может ли динамический компоновщик найти вашу библиотеку? Попробуйте добавить путь к библиотеке в LD_LIBRARY_PATH. Вы можете запустить это в оболочке, прежде чем вызывать Node с вашим тестовым скриптом:

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

(на Mac это будет DYLD_LIBRARY_PATH.)

...