ARM GCC链接器标志是否使用外部newlib库?

wgx48brx  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(186)

我一直在尝试将我从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'. *

wkyowqbh

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

相关问题