Неопределенная ссылка на «добавить» (функция внешнего ассемблера) - PullRequest
1 голос
/ 08 апреля 2019

У меня есть пример с 4 файлами: add_main.c, add.h, Makefile и add.s.Когда я запускаю команду make на терминале, я получаю сообщение об ошибке «add_main.c: 11: неопределенная ссылка на« add »».Я проверил ответы на похожие проблемы, но у меня они не сработали.

Я попытался объявить функцию add в add_main.c с ключевым словом extern и без него и написать имя функции как _add.Это не помогло.

сделать ответ:

user@ser:~/add$ make
arm-linux-gnueabi-gcc -g -mcpu=xscale -O0 -Wall -o add_main.o-c add_main.c
/tmp/cc3HUJRk.o: In function 'main':
/home/user/add/add_main.c:11: undefined reference to 'add'
collect2: error: ld return 1 exit satus
Makefile:34: recipe for target 'add_main.o' failed
make: *** [add_main.o] Error 1
//add.h
int add(int a, int b);
//add_main.c
#include <stdio.h>
#include <stdlib.h>
#include "add.h"

extern int add(int a, int b); 
.............
//add.s
    .text
    .align  2
    .global add
    .type   add, %function
add:
    add r0, r0, r1
    bx lr
    .size   add, .-add
//Makefile
TARGET := add

OBJ := $(TARGET)_main.o $(TARGET).o

ASFLAGS = -mcpu=xscale -alh=$*.lis -L
CFLAGS = -mcpu=xscale -O0 -Wall
LDFLAGS = -g

CC := arm-linux-gnueabi-gcc
AS := arm-linux-gnueabi-as

.PHONY: test all clean distclean

test:   all
    qemu-arm $(TARGET)

all:    $(TARGET)

clean:
    $(RM) $(TARGET) *.o

distclean:  clean
    $(RM) *.lis *~

allhfiles := $(wildcard *.h)

$(TARGET):  $(OBJ)
    $(CC) $(LDFLAGS) -o $@ $^

%.o:    %.s
    $(AS) -g $(ASFLAGS) -o $@ $<

%.o:    %.c $(allhfiles)
    $(CC) -g $(CFLAGS) -o $@ -c $<

%.s:    %.c $(allhfiles)
    $(CC) $(CFLAGS) -fomit-frame-pointer -o $@ -S $<
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...