标签: crosstool-ng

各种glibc和Linux内核版本的兼容性

在构建编译器时,除了glibc版本之外,还必须指定Linux头版本和最小支持的内核版本.然后在目标机器上有实际的内核版本和glibc版本(具有自己的内核头文件版本和最低支持的内核版本).我很难理解这些版本是如何结合在一起的.

示例1:假设我的系统具有针对内核头3.14构建的glibc 2.13.这有任何意义吗?这怎么可能的glibc 2.13(2011年发布)使用新的内核功能,从3.14(2014年发布)?

例2:假设我有一个编译器,glibc的版本更新2.13.编译程序是否可以在glibc 2.13系统上运行?如果编译器的glibc版本2.13

示例3:来自https://sourceware.org/glibc/wiki/FAQ#What_version_of_the_Linux_kernel_headers_should_be_used.3F我明白如果它满足编译glibc时使用的"最小内核版本",则可以使用旧内核.但我不明白这段话The other way round (compiling the GNU C library with old kernel headers and running on a recent kernel) does not necessarily work as expected. For example you can't use new kernel features if you used old kernel headers to compile the GNU C library..这是唯一可能发生在我身上的事吗?如果内核比编译时更新,它会不会在glibc中破坏某些东西?

示例4:在glibc设置中做更细微的差别(例如,将可执行文件与针对内核头文件3.Y编译的glibc版本2.X 链接到最小支持内核版本2.6.A并在具有相同glibc 2.X的系统上执行,但针对内核头文件编译 …

c linux cross-compiling linux-kernel crosstool-ng

7
推荐指数
1
解决办法
9185
查看次数

Crosstool-NG缺少依赖性

我正在尝试使用工具链Crosstool-NG.我使用Crosstool-NG 1.22.0OS X 10.11.4.

我安装使用homebrew,所以我不确定为什么我缺少依赖项.当我尝试构建时,这是我的输出:

$ ct-ng build
[INFO ]  Performing some trivial sanity checks
[INFO ]  Build started 20160504.172530
[INFO ]  Building environment variables
[ERROR]  Missing: 'x86_64-apple-darwin15.4.0-gcj' or 'x86_64-apple-darwin15.4.0-gcj' or 'gcj' : either needed!
[ERROR]   
[ERROR]  >>
[ERROR]  >>  Build failed in step '(top-level)'
[ERROR]  >>
[ERROR]  >>  Error happened in: CT_Abort[scripts/functions@329]
[ERROR]  >>        called from: CT_TestAndAbort[scripts/functions@351]
[ERROR]  >>        called from: main[scripts/crosstool-NG.sh@458]
[ERROR]  >>
[ERROR]  >>  For more info on this …
Run Code Online (Sandbox Code Playgroud)

macos build toolchain crosstool-ng

7
推荐指数
0
解决办法
183
查看次数

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

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

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

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

$ arm-unknown-linux-gnueabi-cpp main.cpp -o test
arm-unknown-linux-gnueabi-cpp: main.cpp: C++ compiler not installed on this system
Run Code Online (Sandbox Code Playgroud)

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

arm-unknown-linux-gnueabi-cpp -v
Using built-in specs.
Target: arm-unknown-linux-gnueabi
Configured with: /opt/crossArm/.build/src/gcc-4.3.2/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-unknown-linux-gnueabi --prefix=/opt/crossArm/.build/arm-unknown-linux-gnueabi/buildtools --with-local-prefix=/home/jgarvin/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot --disable-libmudflap --with-sysroot=/home/jgarvin/x-tools/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot --enable-shared --with-pkgversion='crosstool-NG 1.16.0' --with-float=soft --enable-__cxa_atexit --with-gmp=/opt/crossArm/.build/arm-unknown-linux-gnueabi/buildtools --with-mpfr=/opt/crossArm/.build/arm-unknown-linux-gnueabi/buildtools --enable-target-optspace --disable-libgomp --disable-libmudflap --disable-nls --disable-multilib --enable-languages=c
Thread model: posix
gcc version 4.3.2 (crosstool-NG 1.16.0)
Run Code Online (Sandbox Code Playgroud)

代码 …

c++ linux arm cross-platform crosstool-ng

5
推荐指数
1
解决办法
9417
查看次数

crosstool-ng,目录结构和sysroot

我有一个有效的交叉编译工具链,感谢crosstool-ng :) - 然而,crosstool-ng的文档很少,而且我是交叉编译的全新工具.我认为,具体的主持人和目标在这方面并不重要.

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

arm-unknown-linux-gnueabi
bin
include
lib
libexec
share
Run Code Online (Sandbox Code Playgroud)

我认为这是针对实际的交叉编译器位,因为bin /中的编译器可以用于此目的.请注意,有一个内部arm-unknown-linux-gnueabi /目录,即其中的路径../arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi.里面还有另一棵树:

bin
debug-root
include
lib
lib32
lib64
sysroot
Run Code Online (Sandbox Code Playgroud)

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

> bin/gcc -v
Using built-in specs.
COLLECT_GCC=./gcc
Target: arm-unknown-linux-gnueabi
Configured with: /usr/x-tool/.build/src/gcc-4.7.2/configure 
--build=x86_64-build_unknown-linux-gnu 
--host=x86_64-build_unknown-linux-gnu 
--target=arm-unknown-linux-gnueabi
Run Code Online (Sandbox Code Playgroud)

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

我的第二个问题是:sysroot /应该如何使用?它显然是针对目标平台本地的支持库,所以我假设我是否正在构建这样的库我应该使用它--prefix,尽管它与使用父目录相同,因为lib*是符号链接的...这个"中间目录"的bin和符号链接到sysroot是令人困惑的.我相信(某些)autotools样式包可以配置"--with-sysroot". 如果我看到它,那么它的意义是什么?它应该如何用于其他选项,如--prefix等?

linux crosstool-ng

5
推荐指数
1
解决办法
2702
查看次数

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

我已经安装了一个带有Emdebian的Raspberry PI,并希望交叉编译项目.

有很多关于如何获得工具链并使用它构建一个简单项目的文档.我自己设法用crosstool-ng构建了一个工具链,并编写了一个工作正常的hello world程序.

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

已安装的Emdebian已经包含了libdbus.so,所以我更愿意使用它,而不是交叉编译我自己的libdbus.so,因为编译Qt的所有依赖都需要花费很多时间.

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

  1. "临时"目录下,所有已安装的库和应用程序生活.这最初是工具链的sysroot目录的副本,并且在交叉编译时会填充更多库.
  2. "根文件系统"目录,这相当于什么设备上-本质上是不一样的文档和头文件不需要的东西临时目录中的副本.据我了解,最好的方法是将所需的文件从登台目录复制到rootfs中.

获取rootfs目录很简单,因为它可以是来自设备的NFS挂载.但是,如何在PI上获取现有Emdebian安装的暂存目录?登台目录需要包含诸如dbus标头之类的东西,这些标头未安装在rootfs上.

有些人只需使用apt-get install libdbus-dev在设备上安装dbus头,然后使用rootfs作为暂存目录.使用此设置,rootfs和staging之间没有区别,缺点是rootfs受到头文件,文档等的污染.当然,优势在于它很容易.

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

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

(请注意,我不是在问如何编译Qt,我可以自己解决这个问题.我的问题更为笼统,关于将自定义工具链与现有安装/ rootfs结合使用时的方法)

linux cross-compiling raspberry-pi crosstool-ng

5
推荐指数
1
解决办法
1275
查看次数

crosstool-ng无法获取linux tarball

我正在尝试使用构建工具链crosstool-ng,我已经将其全部设置好,并按照http://crosstool-ng.org/#download_and_usage所述选择了我的CPU ,现在可以构建工具链了。ct-ng build但是,当我输入时,它会由于以下错误而取消:

$ ct-ng build
[INFO ]  Performing some trivial sanity checks
[INFO ]  Build started 20170126.135517
[INFO ]  Building environment variables
[EXTRA]  Preparing working directories
[EXTRA]  Installing user-supplied crosstool-NG configuration
[EXTRA]  =================================================================
[EXTRA]  Dumping internal crosstool-NG configuration
[EXTRA]    Building a toolchain for:
[EXTRA]      build  = x86_64-pc-linux-gnu
[EXTRA]      host   = x86_64-pc-linux-gnu
[EXTRA]      target = powerpc-e500v2-linux-gnuspe
[EXTRA]  Dumping internal crosstool-NG configuration: done in 0.09s (at 00:02)
[INFO ]  =================================================================
[INFO ]  Retrieving needed toolchain …
Run Code Online (Sandbox Code Playgroud)

linux wget crosstool-ng

5
推荐指数
1
解决办法
818
查看次数

使用crosstool-NG的ARM交叉编译器的正确选项是什么

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

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

Processor       : ARM926EJ-S rev 5 (v5l)
BogoMIPS        : 183.09
Features        : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 5
...
Hardware        : Oxsemi NAS
Revision        : 0000
Serial          : 00000d51caab2d00
Run Code Online (Sandbox Code Playgroud)

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

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

我一直在'架构层面“装配:发射CPU”尝试各种组合,如arm926ej-sarmv5larmv5tej …

gcc arm cross-compiling toolchain crosstool-ng

4
推荐指数
1
解决办法
5623
查看次数

如何减少ELF节填充?

我使用 crosstool-NG 使用 gcc 6.3.0 和 glibc 2.25 创建了 PowerPC 工具链。我有以下测试程序 test.c:

int main() { return 0; }
Run Code Online (Sandbox Code Playgroud)

我用以下命令编译它:

powerpc-unknown-linux-gnu-gcc -s -Os -o test test.c
Run Code Online (Sandbox Code Playgroud)

最终的二进制文件为 66904 字节,比预期大得多。节标题如下所示:

$ powerpc-unknown-linux-gnu-readelf -S test
There are 27 section headers, starting at offset 0x10120:

Section Headers:
[Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
[ 0]                   NULL            00000000 000000 000000 00      0   0  0
[ 1] .interp           PROGBITS        10000154 000154 00000d 00   A  0   0  1
[ 2] .note.ABI-tag     NOTE …
Run Code Online (Sandbox Code Playgroud)

c gcc elf crosstool-ng

4
推荐指数
1
解决办法
1682
查看次数