在ARM体系结构上重新编译Hadoop之后缺少库

时间:2015-01-08 10:55:58

标签: c++ ubuntu hadoop hdfs

我遇到以下问题。 我正在尝试编译以下代码

#include "hdfs.h" 

int main(int argc, char **argv) {

   hdfsFS fs = hdfsConnect("default", 0);
   const char* writePath = "/tmp/testfile.txt";
   hdfsFile writeFile = hdfsOpenFile(fs, writePath, O_WRONLY|O_CREAT, 0, 0, 0);
   if(!writeFile) {
      fprintf(stderr, "Failed to open %s for writing!\n", writePath);
      exit(-1);
   }
   char* buffer = "Hello, World!";
   tSize num_written_bytes = hdfsWrite(fs, writeFile, (void*)buffer, strlen(buffer)+1);
   if (hdfsFlush(fs, writeFile)) {
       fprintf(stderr, "Failed to 'flush' %s\n", writePath); 
       exit(-1);
   }
   hdfsCloseFile(fs, writeFile);
}

为了在Hadoop服务器上创建一个文件,通过C ++(示例取自 http://hadoop.apache.org/docs/r1.2.1/libhdfs.html)。

我正在使用Ubuntu 14.04发行版,并且我已经在两个不同的架构上重新编译了Hadoop源代码。

在第一种情况下,一切正常。在第二种情况下,使用ARM体系结构, hdfs库已经创建,我可以编译主要的示例代码但是我总是收到以下错误:

./a.out: error while loading shared libraries: libhdfs.so.0.0.0: cannot open shared object file: No such file or directory

我通过" export LD_LIBRARY_PATH = mypath"设置了目录。命令。

在libhdfs.so文件上运行ldd命令,我看到:

ldd libhdfs.so
    libjvm.so => not found
    libpthread.so.0 => /lib/arm-linux-gnueabi/libpthread.so.0 (0xb6714000)
    libc.so.6 => /lib/arm-linux-gnueabi/libc.so.6 (0xb662c000)
    /lib/ld-linux.so.3 (0xb675f000)

但libjvm.so正确存在于引用的目录中。 关于如何解决\调查问题的任何想法? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

检查架构是否存在不匹配。

  • file libhdfs.so - >给出它是32位还是64位
  • 检查第一次出现的libjvm.so的体系结构 LD_LIBRARY_PATH。