Компиляция собственного модуля C ++ для Node.js, ссылка на openSSL / libcrypto завершается неудачно - PullRequest
1 голос
/ 17 июня 2011

Я использую Cygwin / Windows и пытаюсь создать собственный модуль для node.js. Я намерен использовать библиотеку OpenSSL. Я установил openssl из менеджера пакетов Cygwin.

В моем файле .cc есть следующие строки:

#include <openssl/dh.h>

и

 DH*    public_dh_key = DH_new();

Но когда я пытаюсь связать / скомпилировать его с node-waf configure build, я получаю:

undefined reference to _DH_new

Изменить:

Часть сценария сборки:

def build(bld):
  ppp= bld.new_task_gen('cxx', 'shlib', 'node_addon')
  ppp.cxxflags = ["-g", "-D_FILE_OFFSET_BITS=64", "-D_LARGEFILE_SOURCE", "-Wall", "-L/usr/lib", "-lssl"]
...

(Я пытался добавить -lcrypto, но все еще получал тот же результат. Я также пробовал различные комбинации "-lssl32", "- lssleay32", "- llibeay32".)

Редактировать

Вывод сценария сборки:

$ node-waf configure build
Checking for program g++ or c++          : /usr/bin/g++
Checking for program cpp                 : /usr/bin/cpp
Checking for program ar                  : /usr/bin/ar
Checking for program ranlib              : /usr/bin/ranlib
Checking for g++                         : ok
Checking for node path                   : not found
Checking for node prefix                 : ok /usr/local
'configure' finished successfully (0.330s)
Waf: Entering directory `/usr/src/build'
[1/2] cxx: ppp.cc -> build/default/ppp_1.o
[2/2] cxx_link: build/default/ppp_1.o -> build/default/ppp.node build/default/libppp.dll.a
Creating library file: default/libppp.dll.a
default/ppp_1.o:/usr/src/build/../ppp.cc:289: undefined reference to `_HMAC'
collect2: ld returned 1 exit status
Waf: Leaving directory `/usr/src/build'
Build failed:  -> task failed (err #1):
        {task: cxx_link ppp_1.o -> ppp.node,libppp.dll.a}

Редактировать

У меня есть файл заголовка dh.h в usr / include / openssl

И у меня есть необходимые файлы (libssl32.dll, libeay32.dll и ssleay32.dll) в / usr / lib /

Ответ

jHackTheRipper ответил на это и получил за это кредит, но окончательный ответ скрыт в комментариях под его ответом. Подводя итог, можно сказать, что ваф мантра

obj.lib='crypto'

1 Ответ

1 голос
/ 04 июля 2011

Добавление -lcrypto должно сработать.
Согласно выводу nm в моей системе _DH_new и _HMAC, похоже, находятся в динамической библиотеке libcrypto (часть OpenSSL):

jhacktheripper@macbook-prolocal:~$ nm /usr/lib/libcrypto.dylib | grep _DH_new
0000000000036360 T _DH_new
0000000000036120 T _DH_new_method


jhacktheripper@macbook-prolocal:~$ nm /usr/lib/libcrypto.dylib | grep HMAC
0000000000090d40 T _HMAC
0000000000090c80 T _HMAC_CTX_cleanup
0000000000090910 T _HMAC_CTX_init
00000000000908c0 T _HMAC_CTX_set_flags
0000000000090940 T _HMAC_Final
0000000000090cc0 T _HMAC_Init
0000000000090a10 T _HMAC_Init_ex
0000000000090a00 T _HMAC_Update
...