Linux 为跨工具链部署库

Linux 为跨工具链部署库,linux,gcc,cross-compiling,linux-toolchain,Linux,Gcc,Cross Compiling,Linux Toolchain,我正在为i686 linux机器人系统构建一个跨工具链。我正在使用x86_64 Ubuntu 14.04系统构建工具链。在为目标i686 linux gnu构建工具链之后,我在构建目录中得到了一个名为i686 linux gnu的目录。此目录似乎有许多文件夹位于目标系统的根目录中: 建立目录 i686 linux gnu 垃圾箱 等 包括 解放党 libexec 斯宾 分享 变量 我的假设是,这些是与构建的工具链相对应的支持文件,并且这些文件将存在于目标系统上 我试图简单地将这些目录

我正在为i686 linux机器人系统构建一个跨工具链。我正在使用x86_64 Ubuntu 14.04系统构建工具链。在为目标
i686 linux gnu
构建工具链之后,我在构建目录中得到了一个名为
i686 linux gnu
的目录。此目录似乎有许多文件夹位于目标系统的根目录中:

  • 建立目录
    • i686 linux gnu
      • 垃圾箱
      • 包括
      • 解放党
      • libexec
      • 斯宾
      • 分享
      • 变量
我的假设是,这些是与构建的工具链相对应的支持文件,并且这些文件将存在于目标系统上

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

  • 我是否正确地将这些库部署到目标系统?如果不是,正确的部署步骤是什么

  • 如果这是正确的部署过程,为什么我的搜索路径会中断?系统是否应该继续使用默认搜索路径
    /lib
    /usr/lib


  • 我的工具链构建脚本也可以使用(由于大小的原因)。

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

    我还假设您打算替换此设备上的整个文件系统

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

    我还建议您研究buildroot,它比从头开始构建自己的工具链要容易得多,一些供应商告诉我在将库编译到其嵌入式系统时要使用它


    如果您确实只想部署一些库:

    这看起来不像是正确的过程,您的工具链可能已经创建了默认文件,为空的根文件系统做准备。你应该试着只复制你感兴趣的库以及与之相关的东西。如果不知道你在说什么库,很难判断

    看看是否有一个像/etc/ld.so.conf这样的文件和/或一个名为/etc/ld.so.conf.d的目录
    这就是centos系统中的库搜索路径。

    您的假设是正确的,但有一个例外:我不打算替换整个文件系统,只替换与gcc构建相关的库,它们是运行交叉编译的二进制文件而不出错所必需的。我只需将文件的一个子集复制到目标,比如libstdc++.so*,就可以让事情运行起来。我担心的是,这个库将无法与目标上已经存在的其他库相匹配,因此,即使我可以运行二进制文件,也可能会出现一些隐藏的兼容性问题,这些问题稍后会出现。