2012-05-23 204 views
1

我写了一个32位程序集文件,我想在64位Linux系统上编译它(并使其工作)。我已经安装了gcc-multiliblib32-glibc32位nasm程序集不在64位系统上启动

我尝试用下面的命令创建二进制:

nasm -f elf test.asm 
ld -melf_i386 -o test -e _main test.o /usr/lib32/libc.so.6 

其中_main的入口点。文件测试已创建,我chmod它:

chmod ugo+x ./test 

Howevery,我无法打开它。我得到:

bash: ./test: No such file or directory 

我确信该文件存在,因为我可以在vim打开它(我可以看到ELF写在第一行)。这里发生了什么?

回答

0

该消息与动态链接器有关,因为使用动态库需要更多的努力。简单的方法是链接到静态C库(/usr/lib32/libc.a)。但是,如果你只是把你的入口点叫做“main”并把它连接成一个普通的C程序(gcc -m32 -o test test.o),它也可以工作。

0

问题不在编译器中。

其实你输入了一个错误的命令。

1)编制了32位程序的命令是:NASM -f ELF32 TEST.ASM

and for 64 bit asm or assembly language file command is : nasm -f elf64 test.asm 

2)编译之后,您需要该文件链接该命令是:

 ld -o test test.o (for both the 64/32 bit program) 

3)现在你可以通过命令执行程序:

 ./test 
相关问题