ПРЕДИСЛОВИЕ: Я должен признать, что я полный новичок в Ubuntu и во всех его причудах, поэтому, пожалуйста, будьте осторожны.
Итак, у меня есть эта программа, которую мы используем для задания, над которым мы работалив компьютерном классе в универе - и там он отлично работает.Когда я пытаюсь скомпилировать на своем домашнем компьютере, это дает мне следующее:
Compiling project
/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld: error:
/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/lib/crt0.o: Conflicting CPU architectures 12/1
/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld: failed to merge target specific data of file /usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/lib/crt0.o
collect2: error: ld returned 1 exit status
Makefile:34: recipe for target 'default' failed
make: *** [default] Error 1
Перед этим я просто вызываю make в папке, где находится программа и make-файл.Поскольку он отлично работает на школьном компьютере, и я получаю ошибку «Конфликтующая архитектура процессора», я склонен полагать, что есть ошибка либо с моей Ubuntu, либо с установкой GCC.
Версия Ubuntu:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.2 LTS
Release: 18.04
Codename: bionic
FAMILY := nrf51
SOURCES := main.c uart.c
BUILD_DIR := .build_system
LINKER_SCRIPT := $(BUILD_DIR)/linker_script.ld
GNU_PREFIX := arm-none-eabi
CC := $(GNU_PREFIX)-gcc
OBJCOPY := $(GNU_PREFIX)-objcopy
OBJDUMP := $(GNU_PREFIX)-objdump
QUIET := @
## Compiler flags
# CPU specific
CFLAGS += -mcpu=cortex-m0 -mthumb -mabi=aapcs -mfloat-abi=soft
# Get linker optimization for free
CFLAGS += -ffunction-sections -fdata-sections --short-enums
CFLAGS += -fno-strict-aliasing -fno-builtin
# Good pracice
CFLAGS += -Wall -Werror -std=gnu99
# CFLAGS += -ggdb -Og / -O0 / -O3 etc
## Linker flags
CFLAGS += --specs=nosys.specs -Wl,--gc-sections -T $(LINKER_SCRIPT)
# or --specs=nano.specs -lc -lnosys
SOURCES += $(BUILD_DIR)/system_nrf51.c
SOURCES += $(BUILD_DIR)/gcc_startup_nrf51.S
.PHONY: default flash clean
default:
@echo Compiling project
$(QUIET)$(CC) $(CFLAGS) $(SOURCES) -o $(BUILD_DIR)/main.elf
@echo Creating hex file
$(QUIET)$(OBJCOPY) -O ihex $(BUILD_DIR)/main.elf $(BUILD_DIR)/main.hex
flash:
nrfjprog -f $(FAMILY) --sectorerase --program $(BUILD_DIR)/main.hex
nrfjprog -f $(FAMILY) --reset
erase:
nrfjprog -f $(FAMILY) --eraseall
clean:
$(QUIET)rm $(BUILD_DIR)/main.{elf,hex}