部署用于交叉工具链的库
我正在为i686 linux机器人系统构建交叉工具链。我正在使用我的x86_64 Ubuntu 14.04系统构建工具链。在为目标i686-linux-gnu
构建工具链之后,我在我的构建目录中以名称i686-linux-gnu
结束目录。该目录似乎有一个文件夹的数量是走在目标系统的根目录:部署用于交叉工具链的库
- BUILD_DIRECTORY
- i686的Linux的GNU的
- 斌
- 等
- 包括
- lib
- 的libexec
- sbin目录
- 份额
- VAR
我的假设是,这些都是与已建成的工具链对应的配套文件,而这些文件旨在存在于目标系统上
我试图将这些目录复制到目标系统的根目录/
中,覆盖任何现有文件。这带来了灾难性的结果。例如,由于缺少/不正确的库搜索路径,我无法运行ls
或sudo
。所以我现在有两个问题:
我是否正确地将这些库部署到目标系统?如果不是,那么正确的部署过程是什么?
如果这个是正确的部署过程,为什么我的搜索路径会被破坏?系统不应该继续使用默认搜索路径
/lib
,/usr/lib
等?
我的工具链构建脚本也可以在pastebin(由于大小)。
这个问题有点含糊,所以我做了一些假设。我假设你从头开始创建一个工具链,并且你只在pastebin上使用该脚本。
我还假设你打算替换这个设备上的整个文件系统。
您的脚本没有为ls或sudo安装二进制文件,对于嵌入式系统,通常使用busybox进行这些操作。
我还想推荐你研究buildroot,它比从头开始构建你自己的工具链要容易得多,这正是一些供应商告诉我在将库编译到他们的嵌入式系统时使用的。
如果你真的只希望部署一些图书馆:
这看起来并不像正确的程序,工具链可能已经创建的默认文件空的根文件系统做准备。您应该尝试仅复制您感兴趣的库以及与其相关的内容。很难说不知道你在说什么库
看看你是否有像/etc/ld.so.conf这样的文件和/或一个名为/etc/ld.so.conf.d的目录 这是图书馆搜索路径在一个centos系统中的地方。
您的假设是正确的,但有一个例外:我不打算替换整个文件系统,只是与我的gcc版本相关的库,它们是运行我的交叉编译的二进制文件而不出错的必需库。我可以通过仅将一部分文件复制到目标文件来运行,比如libstdC++。so *。我担心的是,这个库不会与目标上已有的其他库匹配,所以即使我可以运行我的二进制文件,也可能会出现一些隐藏的兼容性问题,稍后会显示。 – Jake