我从https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads下载了工具链“gcc-arm-none-eabi-6-2017-q2-update-win32-sha1.exe”(Windows),并将其安装在我的Windows 10 PC上。
安装文件夹在“../share/doc/gcc-arm-none-eabi/”中包含一个release.txt文件,其内容如下:
此版本包括以下项目:
- 新库和新库-纳米:提交文件:sourceware.org/git/newlib-cygwin.git提交0 d 79 b 021 a4 ec 4 e6 b 9aa 1a 9 f6 db 0 e29 a137005 ce 7
此外,“../share/doc/gcc-arm-none-eabi/”中的自述文件包含:
- C库使用 *
此工具链随两个基于newlib的预构建C库一起发布:一个是标准newlib(libc.a),另一个是newlib-nano(libc_nano.a),用于代码大小。
现在,我希望准确地重建“../arm-none-eabi/lib/thumb”中包含的所有libc. a和libc_nano. a
目前,我可以使用“*gcc-arm-none-eabi-6-2017-q2-update-linux.tar. bz 2 *”在Ubuntu上进行构建
$ # Downloaded newlib-cygwin (with corresponding hash) into folder newlib-cygwin
$ mkdir build
$ cd build
$ ../newlib-cygwin/configure --target=arm-none-eabi --disable-newlib-supplied-syscalls
$ make
如何配置新库以构建gcc-arm-none-eabi-6-2017-q2-update-linux.tar. bz 2中包含的libc. a和libc_nano. a的精确副本?
$ # Downloaded newlib-cygwin (with corresponding hash) into folder newlib-cygwin
$ mkdir build
$ cd build
$ ../newlib-cygwin/configure --target=arm-none-eabi --???
$ make
3条答案
按热度按时间slhcrj9b1#
如果我没理解错的话,更详细的问题是:
“GNU Arm嵌入式工具链”开发人员在构建gcc-arm-none-eabi-6-2017-q2-update-linux.tar. bz 2存档中提供的newlib库时使用了哪些配置选项?
这些是针对newlib的:
--target=arm-none-eabi --enable-newlib-io-long-long --enable-newlib-register-fini --enable-newlib-retargetable-locking --disable-newlib-supplied-syscalls --disable-nls
这些是针对newlib-nano的:
--target=arm-none-eabi --enable-newlib-reent-small --disable-newlib-fvwrite-in-streamio --disable-newlib-fseek-optimization --disable-newlib-wide-orient --enable-newlib-nano-malloc --disable-newlib-unbuf-stream-opt --enable-lite-exit --enable-newlib-global-atexit --enable-newlib-nano-formatted-io --disable-nls
我是怎么得到它的?让我们来看看这个过程:
这些软件包构建在launchpad上,从这里你可以找到所有发生在lanuchpad上的builds。我选择了gcc-arm-none-eabi 6-2017q2-1 from 2017-10-24。在那里我可以找到buildlog。我用
| grep "^+ " | grep "configure " | grep 'src/newlib'
查看了构建日志,结果是:+ /<<PKGBUILDDIR>>/src/newlib/configure --target=arm-none-eabi --prefix=/<<PKGBUILDDIR>>/install-native --infodir=/<<PKGBUILDDIR>>/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/<<PKGBUILDDIR>>/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/<<PKGBUILDDIR>>/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/<<PKGBUILDDIR>>/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-newlib-io-long-long --enable-newlib-register-fini --enable-newlib-retargetable-locking --disable-newlib-supplied-syscalls --disable-nls + /<<PKGBUILDDIR>>/src/newlib/configure --target=arm-none-eabi --prefix=/<<PKGBUILDDIR>>/build-native/target-libs --disable-newlib-supplied-syscalls --enable-newlib-reent-small --disable-newlib-fvwrite-in-streamio --disable-newlib-fseek-optimization --disable-newlib-wide-orient --enable-newlib-nano-malloc --disable-newlib-unbuf-stream-opt --enable-lite-exit --enable-newlib-global-atexit --enable-newlib-nano-formatted-io --disable-nls
我和夏洛克·福尔摩斯推断出第二行是配置为构建为newlib-nano(
--enable-newlib-reent-small
)的newlib,第一行是配置为构建为完整newlib的newlib。要回答您的主题问题,以相同的方式重新编译newlib和newlib-nano,请将我上面发布的选项传递给newlib
./configure
脚本。nxowjjhe2#
有关如何配置编译器的提示,请参见:
$COMPILER_PATH/arm-none-eabi/include/newlib.h
$COMPILER_PATH/arm-none-eabi/include/newlib-nano/newlib.h
这里的
#define
与构建newlib时传递给“configure”的选项非常接近。li9yvcax3#
我认为给出ARM自2023年起构建的newlib/newlib-nano的默认配置会很有用(对于GCC 10):
对于新库:
对于Newlib-nano:
参考:https://community.arm.com/support-forums/f/compilers-and-libraries-forum/53310/gcc-arm-none-eabi-what-were-the-newlib-compilation-options