问题标签 [eabi]

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 投票
2 回答
13449 浏览

gcc - 如何设置 2 字节 wchar_t 输出?

GCC 默认使用 4 字节wchar_t。我可以设置选项-fshort-wcharwchar_tL"string constants". 但是当我将编译器选项设置为我的源文件时,我收到了著名的警告消息

foo.o 使用 2-bytewchar_t但输出是使用 4-byte wchar_twchar_t跨对象使用值可能会失败

因为我真的想要 2 字节wchar_t,所以我也希望输出使用这个变体。是否有任何链接器选项可以告诉它我想要什么?

编辑

此警告不会阻止链接器产生有效输出。但数十条虚假警告涵盖了其他信息。

0 投票
1 回答
6445 浏览

c - ARM:没有帧指针的调用堆栈生成

我正在尝试在 Cortex-M3 处理器(ARMv7-M 架构)上构建调用堆栈,没有操作系统(裸机)。但是,该 ABI 没有帧指针寄存器。因此,当我没有帧指针时,我正在努力生成调用堆栈。

无论使用-mapcs-frame,-fno-omit-frame-pointer-O0GCC 选项,都不会保留帧指针。我想知道是否有不同的 ABI 我可以强制 GCC 使用所以我有一个帧指针/堆栈帧?如果没有,是否有其他可靠的方法来生成调用堆栈?

提前致谢。

0 投票
0 回答
1522 浏览

gcc - gnueabi 和 eabi 有什么区别?

我见过 arm-linux-gnueabi- 和 arm-linux-eabi- 三元组。从我能发现的一点点来看,gnueabi 似乎是 eabi 的“子 abi”。我想知道究竟有什么区别。

我试图让clang为QNX目标编译,所以我想知道使用哪个abi,我尝试了gnueabi,它对于一个小程序来说效果很好。

检查clang的源代码后,我发现两者之间没有太大区别,除了“eabi” std::size_t 在达尔文上是无符号长的,而“gnueabi”总是使用无符号整数,独立于操作系统。

0 投票
1 回答
678 浏览

c - __attribute__ 优化,指定多个标志,并在不同的 -O 级别失败代码

我有一些代码是用 GCC 编译的。我注意到在编译调试版本时,系统工作得很好。但是当我编译发布版本时,系统没有启动。

在解决这个问题一段时间后,我将问题缩小到一个函数,如果我指定一个较小的优化级别(-O0 而不是 -Os),系统将在发布版本中正常启动。所以大概有一个 -Os 设置的标志导致该特定函数中的代码不起作用。

我计划通过获取 -Os 设置的所有标志并找到导致系统无法启动的标志来追踪潜在问题。

我试图做以下事情:

然后消除标志,直到系统启动。问题是,我一直在缩小范围并缩小范围,直到我发现我什至无法设置一个标志并让系统启动。

所以现在我在想我设置优化的方式有问题。如果我在这些标志中间的某个地方放置了一个多余的不存在的标志,例如 -fiam-fake-flag,编译器会检测到它并吐出一个错误(这起初让我觉得我正确设置了这些标志) .

我不想使用编译指示,因为:

" 在此之后定义的每个函数都好像为该函数指定了属性((optimize("STRING")))。"

我只想要对这一功能进行优化,这样我就可以缩小问题的范围。

那么,我是否错误地设置了这些标志?有没有更好的方法来为一个特定的函数指定一大堆编译器标志?

如果它不在微型计算机上,我可以在 Makefile 中指定我想要的所有标志并将其应用于所有函数,但是这样做会使程序太大而无法放入微型计算机。

0 投票
1 回答
1000 浏览

c - 链接需要链接两个相互依赖的静态库:未定义的引用

我知道,这已经被问了一百万次了……不幸的是。

但是,我正在为 ARM Cortex M4 处理器进行金属构建。所以没有任何共享库,只有静态库。将我的程序与 gcc 链接时,会引发以下错误:

libFW.a 是我创建的一个库,其中包含一个名为 syscalls.o 的文件,提供 _exit():

在我看来,gcc 试图链接 libg.a 和lots_of_code.o 但还不知道 _exit() 。但奇怪的是:直接链接到 syscalls.o 时它可以正常工作:

什么可能导致这种情况?

0 投票
0 回答
157 浏览

arm - sigsuspend 系统调用在 ARM 驱动的 linux 平台上导致浮点异常

我正在尝试在 QEMU VM 上运行最初来自 ARM 支持的媒体中心的应用程序。我还尝试在我的 Raspberry Pi 上运行它。

不幸的是,应用程序在尝试执行svc 0x009000b3OABI 调用方式时崩溃sigsuspend

据我所知,在错误调用之前有两个相关说明:

  • MOV R1,#8
  • 移动 R0, SP

还值得一提的是,我在 Qemu VM 和 Pi 上成功地从同一个媒体中心运行了 busybox 二进制文件。

我很高兴知道为什么会发生浮点异常以及如何避免它。

谢谢

0 投票
0 回答
1189 浏览

gcc - 如果工具链未知,则为嵌入式系统编译 C 程序

我有一个 C 程序,我想在(旧的)自定义嵌入式平台上进行基准测试。问题是我只有硬件但没有工具链来为这个平台编译程序。CPU 是 Atmel AT91SAM9260 (ARM),运行嵌入式 Linux,我可以完全访问它。我从嵌入式系统下载了一个程序,并用'readelf -h ...'分析了它的格式:

然后我编写了以下测试程序:

如果我在 Ubuntu 12.04 中使用标准 ARM 交叉编译器(arm-linux-gnueabi-gcc test.c -o test),则会选择错误的 EABI(版本 5 EABI 而不是 GNU EABI)并且它不会在嵌入式系统上运行系统(访问权限等是正确的)。

如果我使用像 Sourcery CodeBench 这样的裸机编译器,我会收到诸如“未定义的引用...”之类的错误。这很清楚,因为缺少标准库。我试图通过将所有 lib 文件从嵌入平台复制到主机并使用“./arm-none-eabi-gcc test.c -o test -static -lc -L ./lib”编译它来解决它。我仍然得到(相同的)未定义的参考错误。

如果工具链未知,为嵌入式系统编译 C 程序的最佳实践是什么?

0 投票
1 回答
739 浏览

gcc - GCC(Sourcery codebench 2013.11)链接时间优化忽略-fno-short-enums

我有两个微不足道的源文件

obj1.cc:

obj2.cc:

我正在使用 Sourcery codebench lite 2013.11:

我使用编译每个源文件

如果我在没有 -flto 的情况下链接它们,则不会调用链接时间优化,并且我会得到一个标记为具有 int 大小的枚举的目标文件:

但是,如果我只是简单地添加-flto到链接器调用中,则输出声称它具有小枚举:

如果我使用 运行链接步骤-v,当 gcc 进入 lto 阶段时,我可以看到:

在我看来,它确实像是在 LTO 步骤中移除-fno-short-enums的东西。COLLECT_GCC_OPTIONS我怀疑这可能是一个普遍的 gcc 问题,并且不限于 Sourcery 构建。

这是一个 gcc 错误吗?我需要 gcc 生成没有短枚举的目标文件,以便链接到使用 32 位枚举构建的某些库。有没有办法在不从源代码重建 gcc 的情况下实现这个目标?

更新:我刚刚在 Ubuntu 14.04 中使用 arm-none-eabi-gcc 4.8.2-14ubuntu1+6toolchain 确认了完全相同的行为(http://packages.ubuntu.com/trusty/devel/gcc-arm-none-eabi )

0 投票
1 回答
2215 浏览

c - 编译 ARM 演示项目时出现链接器错误

我安装了 GNU ARM Embedded Toolchain gcc-arm-none-eabi

当我在https://github.com/ChibiOS/ChibiOS-RT的一个演示项目上运行 make 时

我收到此链接器错误

0 投票
1 回答
1092 浏览

c - ARM EABI 编译器解释中的 memcpy() 指令

我正在使用 ARM EABI 编译器的 memcpy() 函数。正如我在文件中看到的,函数定义为

请原谅我的无知;因为我一般不太熟悉 C 和指针。有人可以详细说明一下 const void * 是什么意思吗?在调用函数时是否需要维护这些语法(如 __attribute 等)?

谢谢!

我的实现: