问题标签 [crosstool-ng]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3118 浏览

linux - 如何使用 crosstool-NG 更改 GCC 的“加拿大交叉”编译的主机类型

我已经安装了 crosstool-NG 并在针对 arm-unknown-linux-gnueabi 的主机 + 构建 x86 机器上构建了 GCC。然后我使用 arm-unknown-linux-gnueabi-gcc 编译了一个在我的 ARM 板上运行良好的程序。

我现在想构建 GCC,目标是 ARM 托管在 ARM 上。我相信行话是

我该怎么做呢?我要为 crosstool-NG 运行 ./configure 并通过 --host=arm-unknown-linux-gnueabi-gcc 吗?

还是我要更改 CC/etc 的环境变量?

0 投票
1 回答
6527 浏览

gcc - 带有 crosstool-NG 的 ARM 交叉编译器的正确选项是什么

我正在尝试使用crosstool-NG构建一个交叉编译器来定位在我的 NAS 盒上运行的处理器。

NAS盒子是ZyXEL NSA210,有一个例子dmesg输出/proc/cpuinfo就是:

目标选项页面上的选项,()中的标志和我当前的设置:

  • 目标架构(臂)
  • 使用 MMU(是)
  • 字节序(小字节序)
  • 位数(32 位)
  • 默认指令集模式(arm)
  • 使用 EABI(是)
  • 架构级别 --with-arch= ()
  • 为 CPU 发出程序集 --with-cpu= ()
  • CPU调优()
  • 使用特定的 FPU ()
  • 浮点数(软件)
  • 目标 CFLAGS ()
  • 目标 LDFLAGS ()

我一直在尝试“架构级别”和“为 CPU 发射程序集”中的各种组合,例如arm926ej-s, armv5l, armv5tej,但我不知道哪个选项在哪里。

我已将目标操作系统设置为裸机,因为 crosstool-NG 没有盒子上使用的 Linux 版本。

此外,一旦构建了工具链,我是否需要再次将相同的选项传递给编译器。

到目前为止,通过尝试刚刚产生的Illegal instruction消息。

编辑

如果有人可以将我指向一篇关于设置 ARM GCC 工具链的文章,并明确参考如何找出正确的参数,那将回答我的问题。

0 投票
3 回答
9674 浏览

c++ - 如何让 crosstool-ng C++ 编译器工作

我正在尝试让 crosstool-ng 同时使用 C 和 C++。即使我在使用 menuconfig 时选择了 C++,它似乎也没有构建。gcc 编译器按预期工作,但不是 g++

我不确定我做错了什么,所以任何帮助将不胜感激。

我按照此处找到的步骤操作: 使用 Crosstool-NG 构建嵌入式 ARM 系统

注意:在 bin 目录中没有arm-unknown-linux-gnueabi-g++找到。我尝试过跨工具版本 1.16.0 和 1.15.3

代码

在我的build.log文件中,我看到 C++ 选项已打开

我也在config.log

0 投票
0 回答
2198 浏览

android - 使用 crosstool-ng 为 arm 交叉编译原生 gcc,有工具链,哪些架构部门,以及哪些构建、主机和目标?

我想为arm构建一个本机gcc,在Android上运行,因为我已经为它构建了glibc,并且想要构建与glibc链接的GNU utils,所以想在Android手机上进行原生编译。

我已经用 crosstools-ng 构建了交叉编译工具链。

我已经交叉编译了 glibc,很好。

已经构建了几个本地 arm (arm-exynos-linux-gnueabi) 实用程序,如 tar 等,并确认它们在 Android 手机上工作,当将构建的 x-tools sysroot 的 lib 目录符号链接到 android 机器上的 /lib 时。

现在我需要构建原生的gcc,这样我就可以在机器上开发了。我在交叉编译方面遇到了一些哲学问题,因为我在这方面相对缺乏经验。

因此,我想问一下如何准确地按步骤进行,因为我已经花了两天时间采用试错法,但到目前为止还没有运气。

所以:gcc依赖mpc,又依赖mpfr,又依赖gmp。

那么,我该如何进行呢?

我要构建哪些架构部门,使用哪些主机目标和构建选项?

  • 创建一个工具目录并在那里构建这些部门,以免弄乱正在运行的工具链?
  • gmp(没有主机、构建、目标?)
  • mpfr(相同?)
  • mpc(相同?)

  • 那么gcc,如何?--host=arm-exynos-linux-gnueabi --build=i686-build_pc-linux-gnu --target=arm-exynos-linux-gnueabi ?

这是正确的,还是我在上述某些步骤中搞砸了?

顺便说一句,我已经按照这个指南http://forum.xda-developers.com/showthread.php?t=1299962构建了 crosstool-ng 工具链,它建议只使用 --host=arm 编译本机应用程序。 ..

我一直在这样做,他们确实在 Android 系统上工作,虽然我觉得不合适,不应该是 --target=arm...?

非常感谢您帮助我完成上述步骤,因为我犯了很多错误。

0 投票
2 回答
3874 浏览

linux - crosstool-ng、目录结构和 sysroot

多亏了 crosstool-ng,我有一个可以工作的交叉编译器工具链 :) -- 然而,crosstool-ng 的文档非常稀少,而且我对交叉编译是全新的。我认为,在这种情况下,特定的主机和目标并不重要。

我有一些关于目录结构的基本问题。工具链安装到以目标命名的目录中。里面是一组目录:

我认为这是针对实际的交叉编译器位,因为 bin/ 中的编译器确实为此目的工作。注意里面有一个 arm-unknown-linux-gnueabi/ 目录,即里面的路径是../arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi. 里面还有一棵树:

lib* 目录是指向 sysroot/ 的符号链接。bin 中的东西似乎与父目录 /bin 中的交叉编译工具集相同:

所以我的第一个问题是:这些是干什么用的?这个目录是干什么用的?

那么我的第二个问题是:应该如何使用 sysroot/ ?它显然是用于目标平台原生的支持库,所以我假设如果我正在构建这样一个库,我应该将它用作--prefix,尽管它与使用父目录相同,因为 lib* 是符号链接的......这个带有 bin 和符号链接到 sysroot 的“中间目录”令人困惑。我相信(某些)autotools 样式的包可以配置为“--with-sysroot”。 那有什么意义

0 投票
1 回答
2082 浏览

qt - 为 Raspberry Pi 交叉编译 Qt 5.0.1 时出错

我正在尝试为我的 Raspberry Pi 交叉编译 Qt 5.0.1(目前的最新版本)。我的设置如下:

操作系统:Ubuntu 12.04 32 位

交叉编译器:由 crosstool-NG 程序构建,使用此处找到的确切说明

Raspberry Pi 操作系统:Raspbian Wheezy 2013-02-09(安装在 /mnt/raspberry-pi-rootfs)

配置命令:

当我运行配置命令时,它总是失败并出现以下错误:

有谁知道这是什么意思?

我已经从这里尝试了最新的预构建 Linaro Toolchain 交叉编译器,并且至少构建了 Qt,但是任何用它编译的程序都会在程序运行时导致 SIGILL(非法指令)错误,我猜这是因为预我使用的内置交叉编译器没有针对正确的架构。

笔记:

我知道交叉编译非常困难,但我想更多地了解正在发生的事情

0 投票
1 回答
1499 浏览

linux - 将现有的 rootfs 与自定义工具链相结合

我有一个安装了 Emdebian 的 Raspberry PI,并且想要交叉编译项目。

有大量关于如何获取工具链并使用它构建简单项目的文档。我自己设法用 crosstool-ng 构建了一个工具链,并编写了一个运行良好的 hello world 程序。

我没有得到的是如何处理交叉编译更复杂的项目,如 Qt,这些项目依赖于其他库。让我们以libdbus为例,因为这是 Qt 的依赖项之一。

安装的 Emdebian 已经包含 libdbus.so,所以我自然更喜欢使用它,而不是交叉编译我自己的 libdbus.so,因为编译所有 Qt 的依赖项会花费很多时间。

据我了解,对于交叉编译,有两个重要的目录:

  1. staging”目录,所有已安装的库和应用程序都位于其中。这最初是工具链的 sysroot 目录的副本,并在交叉编译时填充了更多库。
  2. rootfs”目录,相当于设备上的目录——本质上是暂存目录的副本,没有文档和头文件等不需要的东西。据我了解,最好的方法是将所需文件从暂存目录复制到 rootfs。

获取 rootfs 目录很容易,因为它可以是来自设备的 NFS 挂载。但是,我如何获得 PI 上现有 Emdebian 安装的暂存目录?暂存目录需要包含诸如 dbus 标头之类的内容,这些内容未安装在 rootfs 上。

有些人只需在设备上安装 dbus 头文件,使用apt-get install libdbus-dev,然后使用 rootfs 作为暂存目录。使用此设置,rootfs 和 staging 之间不再有区别,缺点是 rootfs 被标头、文档等污染。优点当然是简单。

将 dbus 标头放入主机上的暂存目录的最佳方法是什么?人们在这种情况下使用的通常方法是什么?

作为一个附带问题,为什么获取工具链、编译程序然后将其复制到目标上的方法完全有效?工具链提供了自己的 libc、libstdc++ 等版本,它们与目标上安装的版本不兼容吗?特别是在使用使用 crosstool-ng 编译的自定义工具链创建时?

(请注意,我不是在问如何编译 Qt,我可以自己弄清楚。我的问题更笼统,关于将自定义工具链与现有安装/rootfs 组合时采用的方法)

0 投票
0 回答
3157 浏览

gcc - 自定义 MIPS 工具链和 abicall 的问题

我正在从事一个专注于 MIPS32 拱门(小端序)的项目。供应商给了我一个 GNU 工具链来编译我的项目,以他们的嵌入式 Linux 版本为目标,一切正常。这是一个 GCC+Linux+uClibc 工具链。

然而,最近我需要在我的 uClibc 构建中添加一些功能,所以我尝试在我自己的盒子中复制供应商的工具链。

在 crosstool-ng 的帮助下一切正常,但是当我尝试编译我的项目时,我到处都收到奇怪的链接器警告:

根据我的研究,这些都是非常严重的警告。用 readelf 分析我的目标文件会给我几乎相同的输出。这些文件中的任何地方都没有 .abicall 部分。这适用于我的项目的目标文件和我的工具链的目标文件。

这里有什么问题?我什至不知道从哪里开始调试这个。

0 投票
1 回答
655 浏览

arm - 使用 fakeroot/fakechroot 的 ARM Linux rootfs 网络无法正常工作

我使用buildroot创建了一个rootfs,但使用了带有glibc的crosstool-ng工具链。这向我展示了所需的最少文件集。然后,我将所有库替换为直接从.deb压缩包中提取的库。然后我添加和混合(也来自.deb包)。我还根据自己的喜好修改了、和文件。将其上传到我的设备后,很多工作都在进行。 带我到正确的地方。 返回根。但是,任何与 DNS 相关的东西都不起作用。例如返回错误地址。我已经复制了armelfakerootfakechrootresolv.confhostsnsswitch.confcd /whoamiping google.comlibnss_*libresolv库以及我认为必要的所有其他内容。输入相同的设置,但在我的主机上使用qemuchroot有效,但我试图找出它在我的目标设备上不起作用的原因。

当我运行时,strace ping google.com我得到以下信息:

很多事情进展顺利。它知道在搜索可执行文件和库时将/data/local/target添加到路径中。您可以看到它找到了各种libnss_*库,并且发现主机文件不只是 at /etc/hosts,但是为什么您认为它没有在正确的位置查找nsswitch.confand resolv.conf?这似乎是fakechroot我如何使用它的问题或问题。

0 投票
1 回答
1741 浏览

linux - Crosstool-ng python 错误

我最近尝试为我的手臂板编译 crosstool-ng。主机是 Arch linux 3.9.4-1。我遇到了以下问题:

当我运行时:

它工作正常,所以我想知道问题可能出在哪里。谢谢你的帮助。