0

非常に基本的な x86 コードを記述し、C プログラムで呼び出そうとしています。OSX 10.8.2 を実行しています。ここに私が持っているコードがあります:

start.c:

#include <stdio.h>

void _main();  // inform the compiler that Main is an external function

int main(int argc, char **argv) {
    _main();
    return 0;
}

code.s

.text

.globl _main
_main:
    ret

次のコマンドを実行して、コンパイルを試みます。

gcc -c -o code.o code.s
gcc -c -o start.o start.c
gcc -o start start.o code.o

最後のコマンドの後に次の出力を返します。

Undefined symbols for architecture x86_64:
  "__main", referenced from:
      _main in start.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

コンパイラ呼び出しに何か不足していますか? 何かを更新/別のものをインストールする必要がありますか? これは非常に一般的な出力であるため、決定的な答えはどこにも見つかりません。ありがとう!

4

1 に答える 1

4

asm_mainシンボルに追加のアンダースコアが必要です。

.text

.globl __main
__main:
    ret

Cシンボルはコンパイル時にアンダースコアプレフィックスを取得するため、Cmainは実際_mainにはextern Cであり、asmで記述したか_mainのように定義する必要があります。__main

于 2012-12-04T22:13:43.593 に答える