如何交叉编译Arm Cortex M4的GSL?

wqlqzqxt  于 2022-12-22  发布在  其他
关注(0)|答案(2)|浏览(241)

我正在使用带有arm cortex m4的STM32 MCU,并希望使用gsl-2.7.1。然而,我已经尝试了例如命令./configure --prefix=/home/user_name/gsl_arm --target=arm-none-eabi以及我可以在互联网和工具链教程上找到的所有其他建议,但在最好的情况下,我在与构建库链接期间遇到了类似“无法识别符号”的错误。在最坏的情况下,建议的自动配置选项没有被识别(例如,指定cpu)。2有人知道我是如何交叉编译它的吗?

nx7onnlm

nx7onnlm1#

由于我缺乏添加评论的声誉,我发布这个答案是为了指出approved answer中的一个小错误。
请注意,您必须使用软件浮点,因为有些库只能使用软件浮点。
软件浮点并不是一个严格的要求,您确实可以使用硬浮点应用程序二进制接口(ABI)来编译GSL。
编译器标志变量CFLAGS拼写错误为CCFLAGS。因此指定的编译器标志被忽略。这是有问题的,因为GSL的 configure 脚本除了为整个库生成主生成文件之外,还为嵌套模块生成生成生成文件。
因此,GSL目录中的 ieee-utils、siman 等模块将使用默认浮点ABI标志(softfp)进行编译。
由于编译器标志也作为参数传递给链接器,GSL的编译会导致不匹配,因为硬fp ABI的预期与为软fp ABI编译的上述模块冲突。
我能够用硬浮点ABI编译GSL,并生成一个静态库,用于BeagleBone Black(ARM Cortex-A8)上的裸机固件开发。

c8ib6hqw

c8ib6hqw2#

我很高兴地说,我能够交叉编译Arm Cortex-M4的GSL。如果您使用以下选项调用autoconf:

COREFLAGS="-mthumb -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=soft"
./configure --prefix=/home/$(whoami)/gsl_arm CC=arm-none-eabi-gcc \
CXX=arm-none-eabi-gcc LD=arm-none-eabi-gcc AR=arm-none-eabi-ar \
OBJCOPY=arm-none-eabi-objcopy CCFLAGS="$COREFLAGS" CXXFLAGS="$COREFLAGS" \
LDFLAGS="--specs=nano.specs --specs=nosys.specs $COREFLAGS"  \
--host=x86_64-unknown-linux-gnu

主机是我的情况下的主机,并使不同。注意,您必须使用软件浮点,因为一些库只与此一起工作。

相关问题