2016-01-02 74 views
1

我一直在试图动态链接一个共享对象与二进制文件。一切都很好,直到我尝试运行它,它给了我:在交叉编译中找不到动态链接库

/tmp/test: error while loading shared libraries: libxl.so: cannot open shared object file: No such file or directory 

也LDD表示该文件无法找到。当然,有问题的库位于默认位置(/ lib/arm-linux/gnueabihf)。在库被复制之后,我也运行了ldconfig。

我检查了以下几件事:

  • 集rpath中包含的位置与正确的位置
  • 集LD_LIBRARY_PATH
  • 创建具有相同名称的虚拟共享对象 - 它已成功发现(当然没有必要的符号)

,创建库为:

ELF 32-bit LSB shared object, ARM, EABI4 version 1 (SYSV), dynamically linked 

而测试二进制文件:

ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked 

的EABI版本可以导致这些类型的问题与运行?还有什么我可以尝试让它运行?

回答

0

库路径必须是HOST机器中库的位置,而不是目标机器。看起来“/ lib/arm-linux/gnueabihf”是目标机器中库的位置。

在工具链sysroot中找到libxl.so的正确路径。

+0

当我创建一个模拟库并将其放置在与原始库相同的位置时,它被发现并加载(当然没有必要的符号,因此执行失败)。那么问题是EABI版本不匹配是否会导致这样的问题。 – MarGru