I’m using Cygwin/Windows and I’m trying to build a native module for node.js. I intend to make use of the OpenSSL Library. I have installed openssl from the Cygwin package manager.
I have the following lines in my .cc file:
#include <openssl/dh.h>
and
DH* public_dh_key = DH_new();
But when I try to link/compile it with node-waf configure build, I get:
undefined reference to _DH_new
Edit:
Part of the build script:
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"]
...
(I have tried adding -lcrypto but still get the same result. I have also tried various combinations of “-lssl32″,”-lssleay32″,”-llibeay32″.)
Edit
Output of the build script:
$ 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}
Edit
I have the header file dh.h in usr/include/openssl
And I have the required files (libssl32.dll, libeay32.dll and ssleay32.dll) in /usr/lib/
The answer
jHackTheRipper answered this and got the credit for it, but the final answer is buried in the comments beneath his answer. So to summarise, the waf mantra is
obj.lib='crypto'
Adding
-lcryptoshould do the trick.According to the
nmoutput on my system_DH_newand_HMACseem to be in thelibcrypto(part of OpenSSL) dynamic library :