Pracuję nad oprogramowaniem embedded dla mikrokontrolera ARM (SAM7) i przy użyciu Yagarto toolchain.Jak zmusić gcc do korzystania z niestandardowych implementacji zaimplementowanych funkcji newlibc?
Mój kod aktualnie łączy się z libc.a. Jednak chciałbym użyć niestandardowej implementacji wbudowanej funkcji, którą mój kod już posiada.
Próbowałem, używając -fno-wbudowane i/lub -fno-wbudowane-memcpy jak określono w GCC Manual ale wciąż narzeka łącznik będzie następujące ostrzeżenie:
contiki-crazy-horse.a(flashd_efc.o): In function `memcpy':
C:\Users\Melvin\GitRepo\projects\Amatis_Project\SAM7_Contiki\examples\er-rest-example/../../cpu/arm//at91sam7s-x/./flashd_efc.c:669: multiple definition of `memcpy'
c:/toolchains/yagarto/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib\libc.a(lib_a-memcpy.o):C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\string/../../../../../newlib-1.19.0/newlib/libc/string/memcpy.c:78: first defined here
collect2: ld returned 1 exit status
make: *** [rest-server-example-nosyms.crazy-horse] Error 1
../../cpu/arm/at91sam7s-x/Makefile.at91sam7s-x:181: recipe for target `rest-server-example-nosyms.crazy-horse' failed
Co to jest poprawny sposób używać niestandardowych implementacji niektórych wbudowanych funkcji gcc?
Edytuj 1: Dodanie polecenia łączenia, którego używam. W poniższym kodzie Porject.a jest plikiem archiwum utworzonym ze wszystkich plików obiektów projektu.
CC = arm-none-eabi-gcc
CFLAGSNO = -I. -I$(CONTIKI)/core -I$(CONTIKI_CPU) -I$(CONTIKI_CPU)/loader \
-I$(CONTIKI_CPU)/dbg-io \
-I$(CONTIKI)/platform/$(TARGET) \
${addprefix -I,$(APPDIRS)} \
-DWITH_UIP -DWITH_ASCII -DMCK=$(MCK) \
-Wall $(ARCH_FLAGS) -g -D SUBTARGET=$(SUBTARGET)
CFLAGS += $(CFLAGSNO) -O -DRUN_AS_SYSTEM -DROM_RUN -ffunction-sections
LDFLAGS += -L $(CONTIKI_CPU) --verbose -T $(LINKERSCRIPT) -nostartfiles -Wl,-Map,$(TARGET).map
$(CC) $(LDFLAGS) $(CFLAGS) -nostartfiles -o project.elf -lc Project.a
Należy również podać wiersz polecenia linku, który wygenerował ten błąd. – Clifford
@ Clifford Edytowałem oryginalny wpis, aby dodać informacje, o które prosiłeś: – maguirre