hadoop编译C++的openssl链接问题

在尝试编译32位hadoop时,遇到C++代码中关于openssl的函数未定义引用问题,如EVP_sha1、HMAC_Init等。通过在makefile中添加-lssl -lcrypto选项,成功解决了编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hadoop的工程是我在电脑上重新编译成32位的,但是直接使用hadoop权威指南的C++文件以及makefile会报错。

makefile:

cc = g++
CPPFLAGS = -m32 -I$(HADOOP_DEV_HOME)/include

maxTemperature:MaxTemperature.cpp
    $(cc) $(CPPFLAGS) $< -lm -Wall -L$(HADOOP_DEV_HOME)/lib/native -lhadooppipes  -lhadooputils -lpthread -g -O2 -o $@ 

clean:
    rm maxTemperature

其中-I是包括特定的头文件夹,-L是包括特定的库文件夹,-l则是包括特定的库文件,-O2是优化选项,-o是制定目标文件名。

但是在make时报错:
*

/usr/hadoop/hadoop-2.6.0/lib/native/libhadooppipes.a(HadoopPipes.cc.o):在函数‘HadoopPipes::BinaryProtocol::createDigest(std::string&,
std::string&)’中:
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:426:对‘EVP_sha1’未定义的引用 /home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:426:对‘HMAC_Init’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:427:对‘HMAC_Update’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:429:对‘HMAC_Final’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:430:对‘HMAC_CTX_cleanup’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:436:对‘BIO_f_base64’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:436:对‘BIO_new’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:437:对‘BIO_s_mem’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:437:对‘BIO_new’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:438:对‘BIO_push’未定义的引用 /home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:439:对‘BIO_write’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:440:对‘BIO_ctrl’未定义的引用 /home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:441:对‘BIO_ctrl’未定义的引用 /home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:446:对‘BIO_free_all’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:426:对‘EVP_sha1’未定义的引用 /home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:426:对‘HMAC_Init’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:427:对‘HMAC_Update’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:429:对‘HMAC_Final’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:430:对‘HMAC_CTX_cleanup’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:436:对‘BIO_f_base64’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:436:对‘BIO_new’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:437:对‘BIO_s_mem’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:437:对‘BIO_new’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:438:对‘BIO_push’未定义的引用 /home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:439:对‘BIO_write’未定义的引用
/home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:440:对‘BIO_ctrl’未定义的引用 /home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:441:对‘BIO_ctrl’未定义的引用 /home/ifuding/Files/hadoop/hadoop-2.6.0-src/hadoop-tools/hadoop-pipes/src/main/native/pipes/impl/HadoopPipes.cc:446:对‘BIO_free_all’未定义的引用
collect2: error: ld returned 1 exit status

*

查了一些资料发现上面未定义的引用全是关于openssl的,在makefile加上 -lssl -lcrypto即可编译成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值