标签: cross-compilation

Mono到底有多神奇?

我正在学习 C#,所以我做了一个 C# 小程序,上面写着Hello, World!,然后用以下命令编译mono-csc并运行它mono

$ mono-csc Hello.cs
$ mono Hello.exe
Hello, World!
Run Code Online (Sandbox Code Playgroud)

我注意到当我TAB输入bash,Hello.exe被标记为可执行文件。事实上,它只通过一个加载文件名的 shell 运行!

Hello.exe不是有一个有趣的文件扩展名的ELF文件:

$ readelf -a Hello.exe
readelf: Error: Not an ELF file - it has the wrong magic bytes at the start
$ xxd Hello.exe | head -n1
00000000: 4d5a 9000 0300 0000 0400 0000 ffff 0000  MZ..............
Run Code Online (Sandbox Code Playgroud)

MZ意味着它是 Microsoft Windows 静态链接的可执行文件。把它放到一个 Windows 盒子上,它就会(应该)运行。

我已经wine安装了,但是wine,是用于的Windows应用程序的兼容层,需时约5倍,只要运行 …

linux mono executable cross-compilation

156
推荐指数
1
解决办法
1万
查看次数

使用交叉编译的 Valgrind

我已经从 Valgrind 主干下载了源代码,并将其构建为在由 ARM926(ARMv5t 架构)提供支持的嵌入式 Linux 系统(Montavista Linux)上使用。一切都很顺利,直到我尝试运行它来检查我制作的一些应用程序;Valgrind 告诉我:

“valgrind:无法为平台‘arm-linux’启动工具‘memcheck’:没有这样的文件或目录”。

尝试运行任何其他工具都会给出相同的消息。对于make install,我使用了 --prefix 选项,指向通过 NFS 挂载的嵌入式系统的文件系统(例如 --prefix=/home/NFS_mounted/opt/valgrind)。我检查了安装位置,那里的lib目录包含适当的工具;我还检查了 Valgrind 的相应 pkgconfig 文件,它似乎没问题,所以我现在有点无能为力,无法弄清楚出了什么问题。2个问题:

  1. 像这样使用/安装交叉编译的 Valgrind 是否正确?也许我在设置方面做错了什么,或者也许我缺少一些涉及主机系统的东西(gdb/gdbserver 之类)。
  2. 有没有人试过在 ARM 架构上运行它?我知道支持是最近的,所以我想知道我是否可以获得不错的结果。

linux embedded cross-compilation

14
推荐指数
2
解决办法
2万
查看次数

为我的 ARM SoC 交叉编译 GLIBC

我在 chroot-ed Debianarmel环境中看到了一些非常奇怪的东西。

但首先,有点背景故事......这很长,但问题很复杂,任何潜在的帮助都取决于了解完整的故事。

我有一个运行 Linux 的嵌入式 ARM SoC - 更具体地说,armel是 2.6.17 内核上的Debian Lenny。Debian的发行版本身易于升级到更高版本(sudo apt-get dist-upgrade),因此可以升至速度,到armel的版本 squeeze或甚wheezy

问题是内核是自定义的......有问题的 ARM SoC 不是主线内核的一部分,所以它在 2.6.17 几乎被放弃了。

如果您知道 Linux 和 GLIBC 是如何工作的,那么您已经可以看到问题了——GLIBC 版本是用最低支持的内核版本编译的……这已经超过了 2.6.17。因此,如果我们尝试将 chroot 转换为 Debian 压缩...

$ # From inside the little ARM machine running Debian Lenny
$ sudo debootstrap --arch armel squeeze /squeeze \
     http://ftp.whateverCountry.debian.org/debian
$ sudo -i
# mount -t proc none /squeeze/proc
# mount -t sysfs none /squeeze/sys …
Run Code Online (Sandbox Code Playgroud)

arm cross-compilation glibc

14
推荐指数
1
解决办法
7203
查看次数

如何在 Ubuntu 18.04 (Bionic Beaver) 上安装功能强大的 ARM 跨 GCC 工具链

语境

我最近安装Ubuntu 18.04, Linux foobar-VirtualBox 4.15.0-23-generic #25-Ubuntu SMP Wed May 23 18:02:16 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux在虚拟机上。我想为带有硬浮点的Cortex-M4F CPU 交叉编译应用程序,因此我已经安装了包gcc-arm-none-eabi版本15:6.3.1+svn253039-1build1以及 libnewlib-arme-none-eabi版本2.4.0.20160527-3.

问题

由于使用硬浮点数的目标文件与使用软浮点数的库之间存在冲突,因此出现链接器错误。一些研究表明这是一个已知的Ubuntu 18.04 (Bionic Beaver) 问题:

请注意,我确实提供了正确的编译器和链接器标志,并且该项目使用来自GNU ARM Embedded的 Windows 交叉工具链正确构建。我认为在这里粘贴完整的错误是没有意义的。如果有人认为这是必需的,我很乐意编辑这个问题。

我已经尝试过的

根据我的基本理解,我有两种解决方案来获得功能性 GCC ARM 工具链:

  1. 降级gcc-arm-none-eabi以返回到工作版本
  2. 从团队 GCC ARM 嵌入式 PPA 中删除gcc-arm-none-eabi并安装(gcc-arm-embedded从 PPA安装 gcc-arm-embedded

降级 gcc-arm-none-eabi,但降级到什么程度?

为了降级,gcc-arm-none-eabi我必须在我的包管理器中找到以前的版本。我首先用 更新了包列表sudo apt …

ubuntu arm gcc apt cross-compilation

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

试图执行“cc1”的 GCC 错误

我正在笔记本电脑(运行 debian 7)上为我的 Raspberry Pi 交叉编译 Linux 内核(按照Raspberry Pi Kernel Compilation 中的说明进行操作);但是在编译时

make ARCH=arm CROSS_COMPILE=${CCPREFIX}
Run Code Online (Sandbox Code Playgroud)

我收到以下消息:

  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
  CC      kernel/bounds.s
gcc: error trying to exec 'cc1': execvp: No such file or directory
make[1]: *** [kernel/bounds.s] Error 1
make: *** [prepare0] Error 2
Run Code Online (Sandbox Code Playgroud)

我认为问题是找不到 cc1 或者gcc没有正确安装(所以我重新安装了 gccapt-get --reinstall install gcc但没有运气)。

gcc -v 给出:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i486-linux-gnu/4.7/lto-wrapper
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-5' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs …
Run Code Online (Sandbox Code Playgroud)

make gcc cross-compilation

12
推荐指数
1
解决办法
3万
查看次数

如何为 ARM 交叉编译 Chromium?

目标

我需要在mini210s运行Linux 3.0.8 armv7l 的FriendlyARM上安装 Chromium

环境

工具链 depot_tools

得到后depot_tools

vagrant@vagrant:~/depot_tools$ fetch chromium
Run Code Online (Sandbox Code Playgroud)

环境变量

export GYP_CROSSCOMPILE=1
export GYP_DEFINES="target_arch=arm arm_float_abi=hard"
Run Code Online (Sandbox Code Playgroud)

依赖关系

vagrant@vagrant:~/depot_tools/src$  ./chrome/installer/linux/sysroot_scripts/install-debian.wheezy.sysroot.py --arch=arm 
Installing Debian Wheezy arm root image: /home/vagrant/depot_tools/src/chrome/installer/linux/debian_wheezy_arm-sysroot
Downloading http://storage.googleapis.com/chrome-linux-sysroot/toolchain/285950/debian_wheezy_arm_sysroot.tgz

build/install-build-deps.sh --arm
build/install-build-deps-android.sh
gclient sync
Run Code Online (Sandbox Code Playgroud)

编译

build/gyp_chromium -Goutput_dir=out_arm 
ninja -C out_arm/Debug chrome
Run Code Online (Sandbox Code Playgroud)

错误

vagrant@vagrant:~/depot_tools/src$ ninja -C out_arm/Debug chrome
ninja: Entering directory `out_arm/Debug'
[222/18316] CXX obj/third_party/webrtc/modules/audio_coding/codecs/audio_encoder_interface.audio_encoder.o
FAILED: ../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD -MF …
Run Code Online (Sandbox Code Playgroud)

arm chrome cross-compilation assembly

12
推荐指数
1
解决办法
2万
查看次数

如何为 Beagleboard 从头开始​​(CLFS)为跨 Linux 构建 GCC 交叉编译器?

目前,我尝试使用Cross Linux from Scratch 中的说明从头开始构建嵌入式 Linux 。

一切正常,直到我尝试编译 GCC 交叉编译器。我想为 Beagleboard-xM 构建 Linux...所以我选择了以下设置:

export CLFS_ABI="aapcs-linux"
export CLFS_HOST="x86_64-cross-linux-gnu"
export CLFS_TARGET="armv7a-unknown-linux-uclibceabi"
export CLFS_ARCH="arm"
export CLFS_ENDIAN="little"
export CLFS_ARM_ARCH="armv7"
export CLFS_ARM_MODE="arm"
export CLFS_FLOAT="hard"
export CLFS_FPU="neon"
Run Code Online (Sandbox Code Playgroud)

不,只要我尝试运行此页面上的说明,命令就会make all-gcc all-target-libgcc出错。

checking for armv7a-unknown-linux-uclibceabi-gcc...  /mnt/clfs/sources/gcc-build/./gcc/xgcc -B/mnt/clfs/sources/gcc-build/./gcc/ -B/mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/bin/ -B/mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/lib/ -isystem /mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/include -isystem /mnt/clfs/cross-tools/armv7a-unknown-linux-uclibceabi/sys-include   
checking for suffix of object files... configure: error: in `/mnt/clfs/sources/gcc-build/armv7a-unknown-linux-uclibceabi/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make: *** [configure-target-libgcc] Error …
Run Code Online (Sandbox Code Playgroud)

embedded arm gcc cross-compilation

10
推荐指数
1
解决办法
3308
查看次数

如何交叉构建 Debian 软件包

我想在 amd64 机器上构建一个 armhf 包。我的 armhf 机器比 amd64 机器慢很多。

debian cross-compilation deb

10
推荐指数
2
解决办法
8264
查看次数

如何在没有gcc的情况下找出三元组?

我尝试为我的设备找出三元组,因为我尝试交叉编译,但目标设备上没有安装 gcc,我不允许安装它。

安装 gcc 后,我可以写 gcc -dumpmachine

没有gcc是否可以找到这些信息?

cross-compilation

9
推荐指数
2
解决办法
6224
查看次数

如何在 Ubuntu 18.04 上安装交叉编译器?

我的过程信息:

 lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               158
Model name:          Intel(R) Core(TM) i5-7400 CPU @ 3.00GHz
Stepping:            9
CPU MHz:             1036.788
CPU max MHz:         3500,0000
CPU min MHz:         800,0000
BogoMIPS:            6000.00
Virtualization:      VT-x
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            6144K
NUMA node0 CPU(s):   0-3 …
Run Code Online (Sandbox Code Playgroud)

ubuntu cross-compilation

9
推荐指数
2
解决办法
2万
查看次数

标签 统计

cross-compilation ×10

arm ×4

gcc ×3

embedded ×2

linux ×2

ubuntu ×2

apt ×1

assembly ×1

chrome ×1

deb ×1

debian ×1

executable ×1

glibc ×1

make ×1

mono ×1