Как связать библиотеку C с библиотекой Assembly на Mac с помощью clang - PullRequest
0 голосов
/ 22 марта 2019

У меня есть это в моей библиотеке C:

myc:
    @clang -I . -dynamiclib \
        -undefined dynamic_lookup \
        -o myc.dylib myc.c
.PHONY: myc

И это в моей сборочной библиотеке:

buildasm:
  @nasm -f macho64 myasm.asm
  @clang -o myasm myasm.o myc.dylib
  # @ld -macosx_version_min 10.13.0 \
  #   -lSystem -o myasm \
  #   myasm.o
  @./myasm
.PHONY: buildasm

Я бы хотел иметь третью сборку или C проект , который загружает библиотеку сборок. Но я не могу заставить эту C -> сборку работать. У меня также не установлен dyld «динамический загрузчик» на Mac, поэтому, если это возможно, я бы предпочел не устанавливать никаких специальных инструментов, но при необходимости я хотел бы знать, как выполнить связывание с инструментом.

Если я превращу buildasm в это:

buildasm:
  @nasm -f macho64 myasm.asm
  @ld -macosx_version_min 10.13.0 \
    -lSystem -o myasm \
    myasm.o myc.dylib
  @./myasm
.PHONY: buildasm

компилируется без ошибок, но при запуске с ./myasm выдает:

Undefined symbols for architecture x86_64:
  "my_c_function", referenced from:
      start in myasm.o
ld: symbol(s) not found for inferred architecture x86_64

Если я делаю это в основном в asm:

extern my_c_function

start:
  call my_c_function

И как-то так в C:

extern void my_c_function() {

}

Хотите знать, что бы сделать эту работу.

...