我正在使用 Cygwin/Windows 并且正在尝试为 node.js 构建一个 native 模块。我打算使用 OpenSSL 库。我已经从 Cygwin 包管理器安装了 openssl。
我的 .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}
编辑
我在usr/include/openssl中有头文件dh.h
我在/usr/lib/中有所需的文件(libssl32.dll、libeay32.dll 和 ssleay32.dll)
答案
jHackTheRipper 回答了这个问题并获得了荣誉,但最终答案隐藏在他回答下方的评论中。所以总而言之,waf 咒语是
obj.lib='crypto'
添加 -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
我是一名优秀的程序员,十分优秀!