gpt4 book ai didi

Linux 找不到动态链接的应用程序

转载 作者:太空狗 更新时间:2023-10-29 12:33:46 27 4
gpt4 key购买 nike

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

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

-/bin/sh: helloworld: not found

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

这是怎么回事?

最佳答案

只是对上面的补充,澄清是否有任何机构面临同样的问题..正如我刚才看到的上述问题..

如果你用静态编译busybox,那么就不用担心共享库了。但是如果你动态编译了 busy box 那么你的工具链在 rootfs 中扮演着重要的角色。这里你需要将工具链库复制到 rootfs/lib 文件夹。

需要复制的库有哪些,输入以下命令即可知道。

字符串 _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:

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

关于Linux 找不到动态链接的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18898649/

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