nasm - не могу связать объектный файл с ld в MacOS Mojave - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь собрать простой Hello World, который прекрасно работал в предыдущей версии macOS:

        global   start
        section  .text
start:  mov      rax, 0x02000004
        mov      rdi, 1
        mov      rsi, msg
        mov      rdx, 13
        syscall
        mov      rax, 0x02000001
        xor      rdi, rdi
        syscall

        section  .data
msg:    db       "Hello world!", 10

Затем я использую nasm и ld, как я делал раньше:

$ nasm -f macho64 hello.asm
$ ld hello.o -o hello

Но ld выдает мне следующую ошибку:

ld: warning: No version-min specified on command line
Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for inferred architecture x86_64

Я попытался переключить start на _main, но получил следующее:

ld: warning: No version-min specified on command line
ld: dynamic main executables must link with libSystem.dylib for inferred architecture x86_64

Даже не знаю, что это может значить.

1 Ответ

0 голосов
/ 16 октября 2018

ld нужен флаг -lSystem, чтобы предотвратить появление этой ошибки.Также необходимо -macosx_version_min, чтобы удалить предупреждение.Правильный способ использования ld будет: ld hello.o -o hello -macosx_version_min 10.13 -lSystem.

...