Почему clang удаляет подчеркивание из функции, объявленной как 'extern "C"'? - PullRequest
0 голосов
/ 13 марта 2019

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

extern "C" void _start() {
    asm("mov $60, %eax\n"
        "mov $24567837, %edi\n"
        "syscall\n");
}

Программа скомпилирована с помощью

clang++ -c step0.cpp -O1 -o step0.o

и связана с помощью

ld -static step0.o -o step0

Я получаю это сообщение об ошибке при попытке связать:

Undefined symbols for architecture x86_64:
  "start", referenced from:
     -u command line option
     (maybe you meant: __start)
ld: symbol(s) not found for inferred architecture x86_64

Я не передаю опцию командной строки -u, поэтому я не уверен, почему я получаю это сообщение об ошибке.

...