只有两个文件main.c
和kernel.asm
,我试图用NASM和GCC编写一个程序。内容如下:在linux中混合使用汇编语言和C编程
的main.c
#include <stdio.h>
void Print_String() {
printf("Hello World!\n");
}
kernle.asm
extern Print_String
[section .text]
global _start
_start:
call Print_String
编译和链接:
nasm -f elf -o kernel.o kernel.asm
gcc -c -o main.o main.c
ld -s -lc -o final kernel.o main.o
然后我运行final
文件使用以下命令:./final
,但结果是令人沮丧的:
bash: ./final: No such file or directory
然而,当前目录中确实有文件final
,该命令ls
,它显示:
final kernel.asm kernel.o main.c main.o
那么为什么找不到文件final
?有什么不对的吗?任何帮助感谢!
你确定它不是一个目录吗? “ls -l”会给你更多的信息。它会告诉你它是否是一个文件,它的大小,它的读/写/执行权限。 – enhzflep 2013-02-14 03:46:20
@enhzflep它确实是一个可执行文件。 'ls -l'显示:'-rwxrwxr-x 1 mycityofsky mycityofsky 1584 Feb 14 11:15 final','mycityofsky'是我的用户名。 – Searene 2013-02-14 03:52:10
'libc'期待'main'被调用,并且期待着一些棘手的启动事情(通过'crt0.o'代码)完成。你不应该使用它,如果没有与'gcc'链接的话 – 2013-02-14 06:49:15