【问题标题】:Dedicated way to Cross-Compiling Open Source Softwares交叉编译开源软件的专用方法
【发布时间】:2012-12-13 09:49:10
【问题描述】:

我是这种行业的新手。我刚刚交叉编译了Linux kernel。但我没有几个问题要问我必须知道的。

当我们编译 Linux 内核时,我正在使用这条命令,因为我的目标平台是 ARM

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

我可以cross compile 任何Open Source 类似的软件吗?这取决于软件支持cross compilation 的软件版本吗?

Linux 内核源代码包含用于不同架构的arch folder,但gccgLibcbinutils 没有,为什么?

但可以是cross-compiled谁能告诉我为什么会发生这种行为?

是否有任何标准方法可以根据要求cross-compile 不同类型的软件?如果有谁精通这种业务,请带领我。

谢谢。

【问题讨论】:

  • 为什么这个问题被否决了?
  • 在规则中提到,如果您对问题投反对票,您应该解释原因。恕我直言,这个问题是完全正确的。
  • 这不是一个好问题。 “交叉编译任何开源”是什么意思?例如,一个用 Java 编写的开源项目可以像这样交叉编译吗?当然 gcc 和 glibc 有 arch 部分,在 sysdeps 下查看。这个问题的任何内容都可以在网上查到。
  • @auselen 哦。嘿嘿..java是平台无关的,你不需要交叉编译.java文件但你需要交叉编译JRE或JDK环境才能在另一个架构上运行字节码。

标签: linux open-source linux-kernel arm cross-compiling


【解决方案1】:

如果具有配置,则在 linux 中有一种通用的软件交叉编译方法 脚本。

提取你要安装的包的源代码。

看看里面有没有配置脚本。

如果是,则运行 ./configure --help 查找支持编译的选项。

我通常使用下面的命令来交叉编译。

./configure --host=arm-none-linux-eabi --prefix=/path/to/where/you/want/to/install

根据包可能需要给出额外的选项。 例如 --with-out= libtiff 等。

如果没有任何配置脚本,则调整到 make 文件中。

【讨论】:

  • --host=arm-none-linux-eabicross-compiler 前缀吗?我需要在外部指定cross-compiler 使用的库路径吗?
  • arm-none-linux-eabi 是交叉编译器前缀。并确保交叉编译器位于环境变量 PATH 中。我没有得到第二个问题。
  • 我的意思是那些被交叉编译器自动调用的共享库还是我需要设置?
  • 如果这些共享库在 PATH 中可用,则配置脚本会自动选择它。如果您不想获得某些库的支持,那么可以在配置时使用选项 --with-out 来跳过它。
【解决方案2】:

Linux 内核有其自己的、非常特殊的构建系统——不仅用于交叉编译——还用于多架构交叉编译。这就是存在一系列arch 文件夹的原因。

大量(但绝不是全部)开源用户空间软件使用GNU autoconf 来管理配置和构建过程。 autoconf 的目的与内核构建脚本有些不同——它允许在各种细微不同的类 UNIX 构建主机上构建软件,以实现同样广泛的构建目标。

autoconf 可以用于交叉编译,需要做一些工作。这里有some hints 。原则上,构建过程需要知道:

  • 使用哪组工具(例如 gcc、binutils)
  • 目标头文件和库的暂存位置
  • 生成产品的安装位置。

gccbinutils 是稍微特殊的情况,因为交叉工具与主机自己的工具一起安装在开发主机上。由于构建过程可能同时使用两者,因此完全由可执行搜索路径完成工具的选择是站不住脚的。相反,交叉工具以特定于目标的名称格式命名 - 例如

arm-linux-gnueabi-gcc

i686-apple-darwin11-llvm-gcc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    相关资源
    最近更新 更多