2015-01-16 3 views
2

Я пытаюсь построить привязку NodeJS lzham, но я все время получаю ошибки symbol lookup error: [...] undefined symbol: [...] всякий раз, когда пытаюсь вызвать функцию из lzham.Ошибка поиска символа во время выполнения

Я включил lzham так:

#define LZHAM_DEFINE_ZLIB_API 
#include "lzham_static_lib.h" 

И мой binding.gyp файл выглядит следующим образом:

{ 
    "targets": [ 
    { 
     "target_name": "lzham", 
     "sources": [ 
     "lzham.cc" 
     ], 
     "include_dirs": [ 
     "<!(node -e \"require('nan')\")", 
     "lzham/include", 
     "lzham/lzhamdecomp", 
     "lzham/lzhamcomp", 
     ], 
    }, 
    ] 
} 

Я компиляции на Linux.

var lzham = require('./build/Release/lzham.node'), 
    buffer = require('fs').readFileSync('compressed'); 

lzham.decompress(buffer); 

Этот код вызывает функцию, определенную в C++, что в свою очередь вызывает lzham_z_inflateInit2, производя эту ошибку:

node: symbol lookup error: /node-lzham/build/Release/lzham.node: undefined symbol: lzham_z_inflateInit2 
+0

Можете ли вы показать полный текст ошибки? –

+0

Я отредактировал мой вопрос. –

ответ

1

Попробуйте это, как родственный include_dirs:

"libraries": [ "-llzham" ] 

Точную имя библиотеки может отличаться в вашей системе, но, надеюсь, это достаточно близко, чтобы вы попали на правильный путь.

+0

'' libraries ": [" -llzham "]' производит '/ usr/bin/ld: не может найти -llzham'. Помещение уже скомпилированного 'liblzhamdecomp.a' в' libraries' по-прежнему вызывает ошибку символьного поиска –

+0

Итак, следующим шагом будет поиск, где определяется 'lzham_z_inflateInit2'. Для этого вы можете использовать 'nm' и/или' objdump -x' для просмотра ваших различных файлов liblzham *. Я также предлагаю попытаться связать с общей библиотекой объектов (* .so, а не * .a). –

+0

Файлы 'liblzham * .a' были единственным выходом' cmake', как я могу создать файлы .so? Кроме того, 'lzham_z_inflateInit2' находится в' liblzhamdll.a', но при вводе его в 'libraries' возникает ошибка при компиляции: '/usr/bin/ld: Release/obj.target/lzham/lzham.o : перемещение R_X86_64_32 в «_Z10DecompressRKN2v89ArgumentsE» не может использоваться при создании общего объекта; перекомпилировать с -fPIC Release/obj.target/lzham/lzham.o: ошибка с добавлением символов: Плохое значение collect2: error: ld возвращено 1 статус выхода lzham.target.mk:112: рецепт для цели 'Release/obj. target/lzham.node 'failed' –

Смежные вопросы