У меня есть это в моей библиотеке 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() {
}
Хотите знать, что бы сделать эту работу.