我遇到了一个项目问题,我试图为我的新STM32F7 Nucleo Board设置。我刚刚安装了GNU ARM Embedded toolchain,STM32CubeF7和GNU MCU Eclipse Plugin,我在我的Windows 7计算机上设置了一个新项目。我以前在家里的Ubuntu笔记本电脑上没有问题。 在我设置项目之后,我添加了HAL和CMSIS库,并使用了STM32CubeF7中的模板项目。到目前为止,编译工作正常,但在链接时我得到以下错误:
c:/program files (x86)/gnu tools arm embedded/5.4 2016q2/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld.exe: cannot find -lc_p-lc_p
据我所知,这里的问题是找不到一些名字很奇怪的图书馆。不幸的是,唯一的page that I found where the same error is described是俄语,我根本不会说。
乍一看,对我来说,看起来生成的makefile已损坏,并且一个名为c_p的库正在尝试链接,但它会在两次之间没有空格的情况下完成两次。所以它可能是Eclipse或Eclipse GNU MCU插件的问题。
我试图摆脱错误的事情:
--specs=nano.specs
-nodefaultlibs
-nostdlib
这是自动生成的makefile:
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
-include ../makefile.init
RM := rm -rf
# All of the sources participating in the build are defined here
-include sources.mk
-include system/src/subdir.mk
-include system/HAL/Src/subdir.mk
-include system/subdir.mk
-include src/subdir.mk
-include subdir.mk
-include objects.mk
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(CC_DEPS)),)
-include $(CC_DEPS)
endif
ifneq ($(strip $(C++_DEPS)),)
-include $(C++_DEPS)
endif
ifneq ($(strip $(C_UPPER_DEPS)),)
-include $(C_UPPER_DEPS)
endif
ifneq ($(strip $(CXX_DEPS)),)
-include $(CXX_DEPS)
endif
ifneq ($(strip $(ASM_DEPS)),)
-include $(ASM_DEPS)
endif
ifneq ($(strip $(S_UPPER_DEPS)),)
-include $(S_UPPER_DEPS)
endif
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
ifneq ($(strip $(CPP_DEPS)),)
-include $(CPP_DEPS)
endif
endif
-include ../makefile.defs
# Add inputs and outputs from these tool invocations to the build variables
SECONDARY_FLASH += \
stm32Template.hex \
SECONDARY_SIZE += \
stm32Template.siz \
# All Target
all: stm32Template.elf secondary-outputs
# Tool invocations
stm32Template.elf: $(OBJS) $(USER_OBJS)
@echo 'Building target: $@'
@echo 'Invoking: GNU ARM Cross C++ Linker'
arm-none-eabi-g++ -mcpu=cortex-m7 -mthumb -mfloat-abi=soft -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -ffreestanding -fno-move-loop-invariants -Wall -Wextra -g3 -p -pg -T mem.ld -T libs.ld -T sections.ld -nostartfiles -L"../ldscripts" -Wl,-Map,"stm32Template.map" --specs=nano.specs -o "stm32Template.elf" $(OBJS) $(USER_OBJS) $(LIBS)
@echo 'Finished building target: $@'
@echo ' '
stm32Template.hex: stm32Template.elf
@echo 'Invoking: GNU ARM Cross Create Flash Image'
arm-none-eabi-objcopy -O ihex "stm32Template.elf" "stm32Template.hex"
@echo 'Finished building: $@'
@echo ' '
stm32Template.siz: stm32Template.elf
@echo 'Invoking: GNU ARM Cross Print Size'
arm-none-eabi-size --format=berkeley "stm32Template.elf"
@echo 'Finished building: $@'
@echo ' '
# Other Targets
clean:
-$(RM) $(CC_DEPS)$(C++_DEPS)$(OBJS)$(C_UPPER_DEPS)$(CXX_DEPS)$(SECONDARY_FLASH)$(SECONDARY_SIZE)$(ASM_DEPS)$(S_UPPER_DEPS)$(C_DEPS)$(CPP_DEPS) stm32Template.elf
-@echo ' '
secondary-outputs: $(SECONDARY_FLASH) $(SECONDARY_SIZE)
.PHONY: all clean dependents
-include ../makefile.targets
有人对我有任何意见吗?
修改 GNU MCU Eclipse插件为新项目提供了一个模板,即使这样我也会遇到同样的错误。
答案 0 :(得分:0)
你犯了一个非常重要的错误。您尝试使用DIY Eclipse配置来导入为特定环境创建的项目。
安装OpenSTM32。 使用SW4STM32工具链设置生成项目。
导入项目。编译,链接和调试
如果您发现已安装的工具链已过时,您将可以替换它。
答案 1 :(得分:0)
过了一会儿,我想出了如何解决这个问题,但遗憾的是我还没有找到究竟是什么导致它。我搜索了我的GNU ARM Embedded toolchain
安装文件夹,但未找到任何包含c_p
的库名称。我认为这个问题的原因必须是在定义链接器的默认库的任何地方,这就是为什么我认为问题在于工具链本身。
但是,我选择禁用默认库(-nodefaultlibs
标志)并自行链接。我链接了以下库:
-lg -lstdc++ -lgcc -lm -lrdimon -lc
如果有人可以帮我找到这个问题的真正根源,那将非常感激。 但是,由于它解决了我的问题,我将结束这个问题。