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

#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);
}

为了通过C++在Hadoop服务器上创建文件(示例取自
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正确存在于引用目录中。
对如何解决\调查问题有任何想法吗?
先感谢您。

最佳答案

检查是否存在任何体系结构不匹配。

  • 文件libhdfs.so->给出它是32位还是64位
  • 检查libjvm.so中首次出现的体系结构
    LD_LIBRARY_PATH。
  • 关于c++ - 在ARM体系结构上重新编译Hadoop源之后缺少库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27838401/

    10-12 17:31