【问题标题】:GCC cross compiler target library installation directoryGCC交叉编译器目标库安装目录
【发布时间】:2015-11-13 04:56:19
【问题描述】:

我正在使用以下./configure 命令构建 GCC 5.2.0 交叉编译器:

../gcc-5.2.0/configure --prefix=/usr --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=x86_64-myos-linux-gnu --disable-nls --enable-languages=c,c++ --with-sysroot=/myos --with-native-system-header-dir=/include

所以构建平台和宿主平台都是x86_64-unknown-linux-gnu,目标平台是x86_64-myos-linux-gnu

在构建环境中,我有一个目录/myos/ 的子目录),其中包含目标平台的根文件系统。

据我了解,GCC 构建过程分为两个主要阶段,第一个阶段是使用构建环境中的工具链生成 GCC 可执行文件等,第二个阶段是使用刚刚构建的可执行文件构建各种“目标库”,例如libgcclibstdc++

所以在makemake DESTDIR=... install 之后,我有:

usr/
usr/bin/
usr/include/
usr/lib/
usr/libexec/
usr/share/
usr/x86_64-myos-linux-gnu/

据我了解,usr/x86_64-myos-linux-gnu/ 包含旨在放入目标平台文件系统的文件(例如libgcclibstdc++.so 文件),但是有几个问题:

1) 只需执行make installusr/x86_64-myos-linux-gnu/ 将不会被放入我的目标目录/myos
2)如果我在mvusr/x86_64-myos-linux-gnu/目录下,会与目标库.la文件不一致。例如,文件usr/x86_64-myos-linux-gnu/lib64/libtsan.la 包含以下行:
dependency_libs=' -lpthread -ldl '/usr/x86_64-myos-linux-gnu/lib/../lib64/'/libstdc++.la -lm'
它表示libstdc++ 的绝对路径,但如果我公然mv usr/x86_64-myos-linux-gnu/ 目录,则根本不存在。

顶级./configure --helpGCC install docs 似乎都没有说明更改usr/x86_64-myos-linux-gnu/ 目录路径的任何方法。有什么想法吗?

【问题讨论】:

    标签: gcc cross-compiling


    【解决方案1】:

    据我了解,usr/x86_64-myos-linux-gnu/ 包含旨在放入目标平台文件系统的文件

    不,你已经构建了一个交叉编译器,所以安装的文件应该存在于 host 平台上,而不是目标平台上。

    1) 只需执行 make install,usr/x86_64-myos-linux-gnu/ 将不会被放入我的目标目录 /myos。

    正确。这些文件位于 GCC 安装树中,而不是 sysroot 中。这样他们仍然会被交叉编译器找到,所以一切仍然有效。

    通常,sysroot(在您的情况下为 /myos)实际上不是目标的根 FS,它是与目标上安装的相同文件的副本,因此将 GCC 的库安装到该 sysroot 中不会真的很有帮助,因为它们不会出现在目标上。

    如果你想在目标上安装这些库,你需要自己在那里安装它们。

    【讨论】:

    • 例如,如果我使用交叉编译器构建一个 C++ 程序,它将链接到主机平台上的 libstdc++.so。但是,如果我随后尝试在目标平台内运行该程序,将找不到 libstdc++.so - 所以我需要使用不同的“--prefix”第二次构建 GCC,仅针对真正的目标库是第一次建造的吗?如果是这样的话。至少可以说似乎有点粗鲁。
    • 不,只是将库复制到目标机器。你不能使用make install 来做到这一点。就像我说的,“如果你想在目标上安装这些库,你需要自己安装它们。”
    • 我知道这是一个选项,但就像我说的那样,即使它“正常工作”,它似乎也不是合适的方式,因为“usr/x86_64-”中有很多“.la”文件myos-linux-gnu/lib/" 表示绝对路径的目录。有一种方法可以更改 "usr/x86_64-myos-linux-gnu/" 目录的默认路径,这几乎没有害处——因为它们是在第 2 阶段构建的文件,其中使用刚刚构建的交叉编译器来构建它们——所以它们非常适合位于目标平台内。
    猜你喜欢
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 2015-04-16
    • 1970-01-01
    • 2021-11-12
    • 2015-08-04
    相关资源
    最近更新 更多