Как я могу вызвать функцию, написанную на сборке ARM в коде C? - PullRequest
0 голосов
/ 05 июля 2018

Чтобы быть конкретным:

  1. Функция сборки кронштейна записана в отдельном файле, таком как файл .S или файл .asm.
  2. Мне нужно вызвать эту функцию в main.c
  3. Сборка ARM выполнена в архитектуре ARMv8.

Я написал тестовый код, но он не работает.

#include <stdio.h>
extern int a_add(int a, int b);
int main(){
    int fi=5;
    int se=7;
    int result=a_add(fi, se);
    printf("result is %d", result);
    return 0;
}

И следующий код сборки. (A_add.S)

.section .text
.globl a_add
a_add:
    add x3,x1,x0
    mov x0,x3
    br x30

Кто-нибудь знает, как я могу исправить эти два файла, чтобы функция a_add работала? Я еще не пробовал .asm файл.

Любая помощь приветствуется, и, пожалуйста, прости, если я допустил ошибку в выражении, но я надеюсь, что мой вопрос ясен.

1 Ответ

0 голосов
/ 06 июля 2018

Я исправил код, используя extern "C", и решил проблему. Нужно просто запросить функцию следующим образом в main.cpp или main.c

extern "C" {int a_add(int a, int b);}

Заменить старую "внешнюю" строку этой строкой на "C". Это полезно, если компилятор предназначен для кода C ++ вместо кода C, в основном, позволяя функции, скомпилированной способом кода C, а не кода C ++.

Я не проводил такой тест, но, полагаю, если компилятор является компилятором C, такой проблемы не будет.

...