我一直在尝试将我从newlib构建的独立库链接到ARM GCC 12的预构建包,这是我从他们的开发人员站点获得的。我已经使用从ARM GCC 12.2.mpacbti-rel1-x86_64-arm-none-eabi-manifest.txt
中的文件中获得的修改后的标志重建了newlib。具体来说,我删除了--enable-newlib-mb
标志,因为它会导致生成大量额外的构建空间。我已经运行了几次newlib的构建,并验证了所使用的newlib配置标志不会影响所产生的错误。
使用编译标志 '-nostdlib'(据我所知,这是使用外部库而不是默认库所必需的)会导致一些对C库函数的未定义引用。其中包括 'memcpy'、'memset' 或 'malloc'。
我目前使用的链接器标志是:-nostdlib -L[gcc path]/lib -lgcc -lc -lm
个
构建的newlib库位于 [gcc-install]/lib 目录中。这目前导致未定义的引用。
编辑:编译器输出包含对以下内容的未定义引用:* 'memset','mktime' 'setvbuf',' strlen','strcmp',' memcpy','strftime','__aeabi_dcmplt','__aeabi_f2d','__aeabi_dadd','__aeabi_dmul,'__aeabi_d2ulz','memmove',' modf','localtime_r',' mallinfo','ctype',' gettimeofday','_errno',' malloc',and 'write'. *
1条答案
按热度按时间wkyowqbh1#
使用标志
-nostdlib
导致链接错误,因为GCC没有链接启动文件(根据KamilCuk的响应)。省略这个标志,而只使用-L
来提供newlib库路径,解决了未定义的函数引用问题。此外,我不得不花一些时间解决浮点ABI问题。链接器抱怨我的项目的
.elf
文件使用hardfp浮点ABI操作,而我的库使用softfp。我为newlib提供了以下路径,它解决了这个问题(版本4.3.0):-L[path to newlib build]/arm-none-eabi/thumb/autofp/v7/fpu/newlib -lc
个