gpt4 book ai didi

c++ - Hadoop Pipes 找不到共享库

转载 作者:可可西里 更新时间:2023-11-01 14:50:45 24 4
gpt4 key购买 nike

我在运行 hadoop 管道程序时遇到此错误。 程序编译成功但在 hadoop 管道上失败。

error while loading shared libraries: Lib.so.0: cannot open shared object file: No such file or directory

生成文件:

CC = g++
HADOOP_PATH = usr/lib/HADOOP
OTHERLIB1_PATH = usr/lib/OTHERLIB1
OTHERLIB2_PATH = usr/lib/OTHERLIB2
OTHERLIB3_PATH = usr/lib/OTHERLIB3
OTHERLIB4_PATH = usr/lib/OTHERLIB4
IMAGE_PATH = usr/lib/IMAGE
LIB_PATH = ../../../src/Lib
PLATFORM = Linux-amd64-64

CFLAGS_HDP = -O3 \
-I$(LIB_PATH) \
-I$(OTHERLIB1_PATH)/include \
-I$(HADOOP_PATH)/$(PLATFORM)/include \
-I$(OTHERLIB4_PATH)/include \
-I$(OTHERLIB2_PATH)/include \
-I$(OTHERLIB3_PATH)/include

LDFLAGS_HDP = -L$(OTHERLIB1_PATH)/lib \
-L$(HADOOP_PATH)/$(PLATFORM)/lib \
-L$(OTHERLIB3_PATH)/lib \
-L$(OTHERLIB2_PATH)/lib \
-L$(OTHERLIB4_PATH)/lib \
-L$(LIB_PATH)/.libs \
-lhadooppipes -lhadooputils -lpthread -lcrypto\
-lLib -lLib4 -lLib1

all: pipes clean

clean:
rm *.o

pipes: LibPipes.cpp xml DocToXml
$(CC) $(CFLAGS_HDP) \
LibPipes.cpp \
-o Lib_Pipes base64.o \
xml.o DocToXml.o $(LDFLAGS_HDP)


xml: xml.cpp base64
$(CC) $(CFLAGS_HDP) base64.o -c xml.cpp -o xml.o

base64: base64.cpp
$(CC) $(CFLAGS_HDP) -c base64.cpp -o base64.o

DocToXml: DocToXml.cpp
$(CC) $(CFLAGS_HDP) -c DocToXml.cpp -o DocToXml.o

我使用以下命令在 hadoop 上运行该程序:

hadoop pipes \
-D hadoop.pipes.java.recordreader=false \
-D hadoop.pipes.java.recordwriter=false \
-D mapred.map.tasks=128 \
-inputformat org.apache.hadoop.mapred.SequenceFileInputFormat \
-writer org.apache.hadoop.mapred.SequenceFileOutputFormat \
-reduce org.apache.hadoop.mapred.lib.IdentityReducer \
-input Input \
-output Output \
-program /user/uss/bin/Lib_Pipes \
-reduces 1

这似乎是动态链接引起的问题。我尝试使用 -files 标志将库提供给 hadoop。还尝试使用不同的编译标志静态链接此程序,如 -static、-Bstatic、-static-libgcc、-static-libstdc++,但这些也不起作用。有谁知道如何在 hadoop 管道上处理这种类型的二进制文件?任何帮助将不胜感激。

最佳答案

我使用的解决方案是压缩所有外部库并在管道中使用 -archives 标志。

zip -r my.zip lib/

此处 lib/ 包含您要链接的所有 .so 文件。

编辑

同时将 -rpath my.zip/lib 添加到 LDFLAGS_HDP。要进行编译,您还需要执行以下操作。

# in src dir
mkdir -p my.zip/lib

/编辑

然后使用你的命令运行管道并添加

-archives my.zip

关于c++ - Hadoop Pipes 找不到共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7957154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com