我正在使用带有arm cortex m4的STM32 MCU,并且想要使用gsl-2.7.1。但是,我已经尝试过例如命令
./configure --prefix=/home/user_name/gsl_arm --target=arm-none-eabi
以及我可以在互联网和工具链教程上找到的所有其他建议,但在最好的情况下,我在与构建库链接期间遇到了类似“无法识别符号”的错误”。在最坏的情况下,自动配置的建议选项无法被识别(例如,指定 cpu)。有谁知道我如何交叉编译它?
接受的答案有一个小错误。
请注意,您必须使用软件浮点,因为某些库仅使用此功能。
软件浮点不是严格要求,您确实可以使用硬浮点应用程序二进制接口(ABI)来编译 GSL 。
编译器标志变量 CFLAGS 已被错误拼写为 CCFLAGS。因此指定的编译器标志将被忽略。这是有问题的,因为 GSL 的 configure 脚本除了为整个库生成主 makefile 之外,还为嵌套模块生成 makefile。
因此,GSL 目录中的 ieee-utils、siman 等模块将使用默认浮点 ABI 标志 (softfp) 进行编译。
由于编译器标志也作为参数传递给链接器,GSL 的编译会导致不匹配,因为硬 fp ABI 的期望与为 softfp ABI 编译的前述模块发生冲突。
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
主持人是我的案例的主持人,有所不同。请注意,您必须使用软件浮点,因为某些库仅使用此功能。