小编Sir*_*blk的帖子

无法在Assembly OS(x86-64)和Mac OSX上的C文件中链接printf和scanf

我在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)

c macos assembly printf nasm

3
推荐指数
1
解决办法
2911
查看次数

标签 统计

assembly ×1

c ×1

macos ×1

nasm ×1

printf ×1