问题标签 [newlib]

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 回答
1898 浏览

c - fwrite 是否刷新 '\n' 上的缓冲区?

我有自己的_open(), _close(), _write(), _read().

我的代码:

BUFSIZE是 1024

编译器:arm-none-eabi-gcc/版本:5.4.1

即使我有标志,为什么还要fwrite()解释?'\n'"wb"

是否fopen()解释文件名"0:test"

0 投票
1 回答
1571 浏览

gcc - 使用现有的交叉编译器构建 newlib

我想使用预安装的 mips 交叉编译器(mips-linux-gnu-gcc)构建 newlib 库。编译器默认链接 glibc。

   

现在我只想使用 mips 编译器编译 newlib 库:

但是当我之后运行 make 时没有任何反应:

当我将 CC 设置为 mips-linux-gnu-gcc 时,make 抱怨缺少 --host 选项。我的建筑步骤有问题吗?

起初对我来说这项任务似乎很简单,但现在我不知道如何让它发挥作用。

0 投票
1 回答
537 浏览

gcc - newlib 的 Clang 在 libc.a 中产生未定义的符号

我正在尝试使用 clang 构建 newlib,主要遵循以下脚本: https ://github.com/jpbonn/Newlib-build-scripts 我已经删除了 clang 和 gcc 之间 newlib 中的所有兼容性问题,遵循这个线程:https:// sourceware.org/ml/newlib/2015/msg00788.html

图书馆建得很精致。但是,我不能使用 libc.a 来编译一个简单的 Hello-World 程序simple.c。我在链接器中收到以下错误:

但是,当我使用交叉编译的 gcc 编译 newlib 时,它会编译并生成正确的libc.a. 我已经检查过nm。clang-compiled libc.a 没有定义的符号,而 cross-compiled-gcc-compiled libc.a 确实具有这些符号:

带有 _vfprintf_r 符号的交叉编译 gcc 编译的 libc.a

带有 _vfprintf_r 符号的 clang 编译的 libc.a

需要注意的是,我的 clang 没有针对我的自定义平台进行交叉编译。但是,由于 clang 根据定义是一个交叉编译器。因此,我不再构建 clang。我只是为 clang 提供适当的参数。就我而言,我使用以下内容编辑 newlib 的生成文件CC_FOR_TARGET

我不明白为什么 clang 不能产生相同的交叉编译 gcc 的相似libc.a. clang 的 libc.a 比 cross-compiled-gcc 的大。

是因为提供给 gcc 的宏定义吗?但在那种情况下,这些定义也应该通过CC_FOR_TARGETclang 传递给新的。在尝试了将近一个星期后,我一无所知。

0 投票
0 回答
150 浏览

gcc - sqrtf中的双除法?[更新]

我在 STM32F0 上使用浮点运算(软件实现),并在清单中发现了一些奇怪的东西。一旦我使用 sqrtf,链接器就会添加 __aeabi_ddiv,它是 ~1.6kB 的内存。

此代码示例链接到 ddiv:

删除 sqrtf 也会删除 ddiv。所以我的问题:

  • 这是预期的行为吗?

  • 如果没有,我该如何解决。

  • 没有双倍可以做 sqrt 吗?

编译器:arm-atollic-eabi-gcc

sqrtf 列表(ddiv 在 0x800543e):

更新我想我找到了原因,但仍然不太明白。 sqrtf的来源

双除法是异常处理的一部分,虽然 0.0/0.0 应该在编译时完成,对吧?如果我直接调用 __ieee754_sqrtf ddiv 是不链接的。这解决了我的问题,但我想知道如何使用 sqrtf 来做到这一点。

0 投票
2 回答
6852 浏览

c++ - 如何重建 GNU Arm Embedded Toolchain 的 newlib 和 newlib-nano

我从https://developer.arm.com/open-source/gnu-下载了工具链“<em>gcc-arm-none-eabi-6-2017-q2-update-win32-sha1.exe”(Windows)toolchain/gnu-rm/downloads并将其安装在我的 Windows 10 PC 上。

安装文件夹在“<em>../share/doc/gcc-arm-none-eabi/”中包含一个 release.txt,它告诉您:

此版本包括以下项目:

  • newlib 和 newlib-nano : git://sourceware.org/git/newlib-cygwin.git commit 0d79b021a4ec4e6b9aa1a9f6db0e29a137005ce7

“<em>../share/doc/gcc-arm-none-eabi/”中的 readme.txt 还包含:

  • C 库使用 *

此工具链发布时包含两个基于 newlib 的预构建 C 库:一个是标准 newlib (libc.a),另一个是用于代码大小的 newlib-nano (libc_nano.a)。

现在我想完全重建“<em>../arm-none-eabi/lib/thumb”中包含的所有 libc.a 和 libc_nano.a</p>

目前我可以在 Ubuntu 上使用“<em>gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2”</p>

如何配置 newlib 以构建 libc.a 和 gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 中包含的 libc_nano.a 的精确副本?

0 投票
1 回答
3393 浏览

c++ - 将 LTO 与 arm-none-eabi 和 newlib-nano 一起使用

我正在为 STM32F103 开发一个裸机嵌入式项目,并且我正在使用GNU ARM Embedded 版本 7-2017-q4-major工具链。我目前正在通过 GNU ARM Eclipse 进行编译。

我正处于需要开始优化项目以提高速度的地步,作为第一件事,我当然尝试打开所有优化器标志。其他一切都很好,但是当我尝试使用 启用链接时间优化时-flto,在最后一步出现链接器错误:

这显然是由于 newlib-nano 没有使用 LTO 编译?

那么我该如何让它工作呢?我想我可以尝试自己编译 newlib-nano并添加必要的标志(并更改工具以使用 -gcc-ar 等),但我想/希望有人已经这样做了?我的 google-fu 不足以找到任何有用的东西。

0 投票
0 回答
191 浏览

gcc - 为什么_exit() 会跳转到_etext?

我正在使用ARM Embedded Tollchain在使用 newLib 的 stm32 微控制器上运行一个项目。

我打电话assert(false)来测试断言输出并以硬故障异常结束。我调试到程序集assert(...)并发现随后调用_exit(1)跳转到一个地址至极被调用_etext。查看_etext的手册页显示这_etext是 .text 部分末尾的地址。

我真的很困惑。通常我认为这_exit()__exit()我在一个名为syscalls.c.

为什么_exit()跳到_etext?

以下是一些应对片段,以便更好地理解:

从 newLib 2.5中对_exit()by的后续调用:assert()

abort和的拆卸assert。特别看一下执行跳转到 80a5198 ( _etext) 的地址 0808a10a:

显示 80a5198 是以下地址的 lss 文件_etext

0 投票
0 回答
679 浏览

qemu - 为什么 GNU Arm Embedded Toolchain 的示例(gcc-arm-none-eabi/samples/src/qemu)不能工作?

英语不是我的母语,对此我深表歉意。

最近,我想了解有关 C lib 初始化的详细信息。开发/调试环境如下:

硬件: QEMU 模拟器GNU MCU Eclipse QEMU

软件: GNU Arm 嵌入式工具链示例

IO: 半主机

CrossToolchian: GNU Arm 嵌入式工具链(gcc-arm-none-eabi-7-2017-q4-majo)

了解Semihosting、Crosstoolchain、QEMU的原理和用法。我已经写了Cortex-M3的启动源代码,没有初始化newlib,所以我了解cpu启动步骤和链接脚本的关键点。此外,我还编写了在 QEMU 中运行的半主机源代码。我找到了GNU MCU Eclipse,一个关于开发 Coortex-M 系列程序的项目。我可以使用这个项目来实现我的目标。但我想知道用 newlib 启动的细节。所以,我打算从头开始编写程序。我从 GNU Arm Embedded Toolchain 的自述文件中获得了一些有用的信息。当使用 Semihosting 在 QEMU 上运行时,它为 Cortex-M3 提供 newlib。我想我应该使用 qemu 的样本。以下是设计师对示例的描述:

** qemu - 展示如何构建在 qemu 上运行的 Cortex-M 裸机程序。本案例构建了一个可以在 qemu for ARM 上运行的简单应用程序。它使用 qemu 支持的半主机处理文件 IO。

我编译了这个例子并在 qemu 上运行它,它打印任何东西。我不知道为什么。谁能给我帮助?

编译:

跑:

当看到编译的细节时,我发现程序没有链接startup_ARMCM3.S。

编译细节:

0 投票
1 回答
155 浏览

gcc - 如何将 ilogb 与 newLib 一起使用?

我正在使用一个 stm32,它使用使用 newLib 的GNU Arm Embedded Toolchain 。

我从asn1c添加了一些骨架,并在使用浮点数时遇到了链接器问题。链接器错误说:

在我看来 newLib 没有实现ilogb(见man ilogb

我如何使用ilogbnewLib 或者我可以调用其他函数?

0 投票
0 回答
151 浏览

gcc - newlib-cygwin 构建。没有规则进行目标安装

我尝试在 CentOS 上构建 newlib-cygwin。得到那些错误。