我在Assembly(x86-64)中编写了一个程序,并从C文件包装器调用它来使用printf和scanf函数.但是,当我尝试链接它时,我收到以下错误:
$ nasm -f macho64 -l Parallelograms.lis -o assembly.o Parallelograms.asm
$ gcc -c -Wall -m64 -o main.o ParallelogramDriver.c
$ gcc -m64 -o main.out main.o assembly.o
Undefined symbols for architecture x86_64:
"_calcAndPrint", referenced from:
_main in main.o
"printf", referenced from:
calcAndPrint in assembly.o
"scanf", referenced from:
calcAndPrint in assembly.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我相信这与macho64旗帜有关.如果我使用elf64,它将不会捕获printf或scanf错误.但是,elf64在Mac上是一种不兼容的文件格式(据我所知).
这是我的C文件(ParallelogramDriver.c):
#include <stdio.h>
#include <stdint.h> //For C99 compatability
extern int calcAndPrint();
int main(int argc, char* argv[])
{
//Run …Run Code Online (Sandbox Code Playgroud)