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

问题描述 投票:0回答:3

我正在使用带有arm cortex m4的STM32 MCU,并且想要使用gsl-2.7.1。但是,我已经尝试过例如命令

./configure --prefix=/home/user_name/gsl_arm --target=arm-none-eabi
以及我可以在互联网和工具链教程上找到的所有其他建议,但在最好的情况下,我在与构建库链接期间遇到了类似“无法识别符号”的错误”。在最坏的情况下,自动配置的建议选项无法被识别(例如,指定 cpu)。有谁知道我如何交叉编译它?

c cross-compiling gsl mcu
3个回答
2
投票

接受的答案有一个小错误。


请注意,您必须使用软件浮点,因为某些库仅使用此功能。

软件浮点不是严格要求,您确实可以使用硬浮点应用程序二进制接口(ABI)来编译 GSL 。

编译器标志变量 CFLAGS 已被错误拼写为 CCFLAGS。因此指定的编译器标志将被忽略。这是有问题的,因为 GSL 的 configure 脚本除了为整个库生成主 makefile 之外,还为嵌套模块生成 makefile。

因此,GSL 目录中的 ieee-utils、siman 等模块将使用默认浮点 ABI 标志 (softfp) 进行编译。

由于编译器标志也作为参数传递给链接器,GSL 的编译会导致不匹配,因为硬 fp ABI 的期望与为 softfp ABI 编译的前述模块发生冲突。


我能够使用硬浮点 ABI 编译 GSL,并生成用于 BeagleBone Black (ARM Cortex-A8) 上裸机固件开发的静态库。


1
投票
我很高兴地说我能够交叉编译 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
主持人是我的案例的主持人,有所不同。请注意,您必须使用软件浮点,因为某些库仅使用此功能。


0
投票
我还为 Arm Cortex-M4 交叉编译了 gsl,并且还必须添加 RANLIB 标志以及相应的路径,这是在 Darwin 上构建的。那是因为否则编译器将使用本机 xcode ranlib 程序。

© www.soinside.com 2019 - 2024. All rights reserved.