部署用于交叉工具链的库

问题描述:

我正在为i686 linux机器人系统构建交叉工具链。我正在使用我的x86_64 Ubuntu 14.04系统构建工具链。在为目标i686-linux-gnu构建工具链之后,我在我的构建目录中以名称i686-linux-gnu结束目录。该目录似乎有一个文件夹的数量是走在目标系统的根目录:部署用于交叉工具链的库

  • BUILD_DIRECTORY
    • i686的Linux的GNU的
      • 包括
      • lib
      • 的libexec
      • sbin目录
      • 份额
      • VAR

我的假设是,这些都是与已建成的工具链对应的配套文件,而这些文件旨在存在于目标系统上

我试图将这些目录复制到目标系统的根目录/中,覆盖任何现有文件。这带来了灾难性的结果。例如,由于缺少/不正确的库搜索路径,我无法运行lssudo。所以我现在有两个问题:

  1. 我是否正确地将这些库部署到目标系统?如果不是,那么正确的部署过程是什么?

  2. 如果这个正确的部署过程,为什么我的搜索路径会被破坏?系统不应该继续使用默认搜索路径/lib/usr/lib等?

我的工具链构建脚本也可以在pastebin(由于大小)。

这个问题有点含糊,所以我做了一些假设。我假设你从头开始创建一个工具链,并且你只在pastebin上使用该脚本。

我还假设你打算替换这个设备上的整个文件系统。

您的脚本没有为ls或sudo安装二进制文件,对于嵌入式系统,通常使用busybox进行这些操作。

我还想推荐你研究buildroot,它比从头开始构建你自己的工具链要容易得多,这正是一些供应商告诉我在将库编译到他们的嵌入式系统时使用的。


如果你真的只希望部署一些图书馆:

这看起来并不像正确的程序,工具链可能已经创建的默认文件空的根文件系统做准备。您应该尝试仅复制您感兴趣的库以及与其相关的内容。很难说不知道你在说什么库

看看你是否有像/etc/ld.so.conf这样的文件和/或一个名为/etc/ld.so.conf.d的目录 这是图书馆搜索路径在一个centos系统中的地方。

+0

您的假设是正确的,但有一个例外:我不打算替换整个文件系统,只是与我的gcc版本相关的库,它们是运行我的交叉编译的二进制文件而不出错的必需库。我可以通过仅将一部分文件复制到目标文件来运行,比如libstdC++。so *。我担心的是,这个库不会与目标上已有的其他库匹配,所以即使我可以运行我的二进制文件,也可能会出现一些隐藏的兼容性问题,稍后会显示。 – Jake