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即可编译成功