Проблема определения функции во встроенной сборке и вызов из c ++ - PullRequest
0 голосов
/ 28 августа 2018

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

/ tmp / ccUVLIZ0.ltrans0.ltrans.o: в функции `main ':

:(. Text.startup + 0x5): неопределенная ссылка на `one '

collect2: ошибка: ld вернул 1 состояние выхода

Эквивалент голого атрибута GCC

Компоновщик не видит определение сборки?

Код ниже:

#include <stdio.h>

asm("_one:              \n\
    movl $1,%eax    \n\
    ret             \n\
");

int one();

int main() {
    printf("result: %d\n", one());
    return 0;
}

1 Ответ

0 голосов
/ 28 августа 2018

Для таких трюков необходимо явно указать спецификацию функции

#include <stdio.h>

asm("one:              \n\
    movl $1,%eax    \n\
    ret             \n\
");

extern "C" int one();

int main() {
    printf("result: %d\n", one());
    return 0;
}

Вы, вероятно, можете найти больше объяснений об extern "C" в Как влияет extern "C" на C ++?

...