当面の問題は、デフォルトでインタープリターとしてld使用/lib/ld64.so.1することであり、それを見逃す可能性があります(シンボリックリンク/lib64/ld-linux-x86-64.so.2または適切なものである可能性があります):
$ readelf -l a.out | grep interpreter
[Requesting program interpreter: /lib/ld64.so.1]
$ ls -l /lib/ld64.so.1
ls: cannot access /lib/ld64.so.1: No such file or directory
-dynamic-linker /lib64/ld-linux-x86-64.so.2オプションをld呼び出しに渡してインタープリターを明示的に設定することで、これを回避できます。
$ ld -s -dynamic-linker /lib64/ld-linux-x86-64.so.2 test.o -lc
$ readelf -l a.out | grep interpreter
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
$ ./a.out
$
ただし、単純な経験則としてgcc、libc が必要な場合はリンクに使用することです。これにより、すべてが適切に行われます。mainまた、通常の libc 起動コードが初期化される可能性があるように、必ずエントリ ポイントとして使用してください。同様にmain、最後にyour から戻るだけで、 exitsyscall を直接使用しないでください (exit本当に必要な場合は、libc の関数を使用することもできます)。一般に、syscall の使用は推奨されません。