【问题标题】:Deploying libraries for a cross toolchain为跨工具链部署库
【发布时间】:2015-12-29 23:53:08
【问题描述】:

我正在为 i686 linux 机器人系统构建一个交叉工具链。我正在使用我的 x86_64 Ubuntu 14.04 系统构建工具链。在为目标i686-linux-gnu 构建工具链后,我最终在构建目录中创建了一个名为i686-linux-gnu 的目录。该目录似乎有许多文件夹位于目标系统的根目录中:

  • build_directory
    • i686-linux-gnu
      • bin
      • 包括
      • libexec
      • sbin
      • 分享
      • 变量

我的假设是这些是与构建的工具链相对应的支持文件,并且这些文件旨在存在于目标系统上

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

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

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

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

【问题讨论】:

    标签: linux gcc cross-compiling linux-toolchain


    【解决方案1】:

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

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

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

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


    如果你真的只想部署一些库:

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

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

    【讨论】:

    • 您的假设是正确的,但有一个例外:我不打算替换整个文件系统,只是替换与我的 gcc 构建相关的库,这些库对于运行我的交叉编译的二进制文件而不会出错。我可以通过仅将文件的子集复制到目标(例如 libstdc++.so*)来运行。我担心这个库不会与目标上已经存在的其他库匹配,所以即使我可以运行我的二进制文件,也可能会出现一些隐藏的兼容性问题。
    猜你喜欢
    • 2021-01-09
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2010-10-31
    • 1970-01-01
    • 2012-02-16
    相关资源
    最近更新 更多