问题标签 [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.
c - fwrite 是否刷新 '\n' 上的缓冲区?
我有自己的_open()
, _close()
, _write()
, _read()
.
我的代码:
BUFSIZE
是 1024
编译器:arm-none-eabi-gcc
/版本:5.4.1
即使我有标志,为什么还要fwrite()
解释?'\n'
"wb"
是否fopen()
解释文件名"0:test"
?
gcc - 使用现有的交叉编译器构建 newlib
我想使用预安装的 mips 交叉编译器(mips-linux-gnu-gcc)构建 newlib 库。编译器默认链接 glibc。
现在我只想使用 mips 编译器编译 newlib 库:
但是当我之后运行 make 时没有任何反应:
当我将 CC 设置为 mips-linux-gnu-gcc 时,make 抱怨缺少 --host 选项。我的建筑步骤有问题吗?
起初对我来说这项任务似乎很简单,但现在我不知道如何让它发挥作用。
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_TARGET
clang 传递给新的。在尝试了将近一个星期后,我一无所知。
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 来做到这一点。
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 的精确副本?
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 不足以找到任何有用的东西。
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
:
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。
编译细节:
gcc - 如何将 ilogb 与 newLib 一起使用?
我正在使用一个 stm32,它使用使用 newLib 的GNU Arm Embedded Toolchain 。
我从asn1c添加了一些骨架,并在使用浮点数时遇到了链接器问题。链接器错误说:
在我看来 newLib 没有实现ilogb
(见man ilogb)
我如何使用ilogb
newLib 或者我可以调用其他函数?
gcc - newlib-cygwin 构建。没有规则进行目标安装
我尝试在 CentOS 上构建 newlib-cygwin。得到那些错误。