【问题标题】:Linux Cant find dynamically linked applicationsLinux 找不到动态链接的应用程序
【发布时间】:2013-09-19 15:18:20
【问题描述】:

我有一个运行 Linux Kernel 3.10 和 Busybox 的嵌入式系统。

如果我交叉编译(由 bu​​ildroot 构建工具链,因此它使用 uclibc)没有 -static 标志的程序。它不会运行。

-/bin/sh: helloworld: not found

如果我使用 -static 标志编译我的代码。它会正常运行并输出HelloWorld

这是怎么回事?

【问题讨论】:

  • helloworld 不是您的应用程序的名称吗?找不到哪个 .so 文件?
  • 您是否在不使用-static 时检查了helloworld 是否正确构建?看起来二进制文件没有被构建
  • Helloworld 正确构建没有错误或任何没有静态的东西。我只是无法在我的系统上运行它。 Helloworld 是我的应用程序的名称,如果我执行 LS,我可以在那里看到它,但是在输入 ./helloworld 后它说它没有找到。
  • 是应用程序的名称helloworld 还是Helloworld?您的文件系统可能区分大小写,在这种情况下,它们是不同的东西
  • 不是区分大小写的问题。即使我重命名它也行不通。我认为这是一个共享库问题。

标签: linux dynamic static kernel busybox


【解决方案1】:

只是上面的一个补充,它澄清了是否有任何人面临同样的问题..正如我刚才看到的上面的问题..

If you compile busybox with statically.Then no need to worry about shared library. But if you compiled busy box with dynamically then your toolchain plays important role in rootfs. here you need to copy libraries of toolchain to rootfs /lib folder .

只需输入以下命令即可知道需要复制的库。

strings _install/bin/busybox | grep ^lib

显示应该保存在 rootfs 的 /lib 中的列表库。

此命令说,“从文件中获取所有字符串,并且只显示以 lib 开头的行。”程序 ldd 不能使用,因为程序已经过交叉编译,不会在开发主机上运行。这些文件应该从工具链的 sysroot 目录中获取。大多数现代工具链都配置了 sysroot,它是一个目录,其中包含来自工具链的文件,这些文件可能出现在工具链所针对的系统的根文件系统上。要检查您的工具链是否支持 sysroot,请尝试以下操作:

$ arm-linux-gcc -print-sysroot

/arm-unknown-linux-gnueabi/bin/arm-linux-gcc 如果这是一个有效路径,则应该从这里复制文件。如果没有显示路径,使用 find 查找 sysroot 目录,或者使用 find 查找 libc.so:

$ find . -name libc.so找到 libc 和 libm 后,创建 (你的 rootfs)/lib 目录并将它们复制到那里。这些文件可能是指向其他文件的符号链接,因此请务必将它们全部收集起来。下一个要获取的文件是动态加载程序,通常称为 ld-linux-,它也与 libc.so.* 一起驻留在 lib 目录中。将其复制到 /lib 目录。您的系统现在拥有所有共享库和加载器,因此 BusyBox 可以运行。`

【讨论】:

    【解决方案2】:

    我找到了答案。我犯了一个简单的错误,没有将 uClibc 库放在我的文件系统上。

    我知道那里有库,我可以运行非静态应用程序!

    【讨论】:

      【解决方案3】:

      解决此问题的方法是将 uClibc 库复制到目标文件系统中,可以按照以下步骤完成:

      1. uClibc 库位于“buildroot/output/target/lib/”文件夹中。 2.我们必须将该文件夹中的所有文件复制到目标文件系统的“/lib”文件夹中。 3.复制的事情可以通过“scp”命令来完成。 sudo scp -r PATH_TO_BUILDROOT/output/target/lib/* TARGET_USERNAME@TARGET_IP:/lib

      完成此操作后,所有应用程序都将正常运行。

      【讨论】:

        猜你喜欢
        • 2016-11-23
        • 2023-03-27
        • 2020-01-19
        • 1970-01-01
        • 1970-01-01
        • 2017-11-26
        • 2022-11-25
        • 2021-06-24
        • 2016-06-29
        相关资源
        最近更新 更多