为跨工具链部署库

时间:2015-12-29 23:53:09

标签: linux gcc cross-compiling linux-toolchain

我正在为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等?

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

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