我编写了一个32位的汇编文件,我想在64位Linux系统上编译它(并让它工作)。我已安装gcc-multilib
和lib32-glibc
。
我尝试使用以下命令创建二进制文件:
nasm -f elf test.asm
ld -melf_i386 -o test -e _main test.o /usr/lib32/libc.so.6
其中_main
是入口点。创建了文件测试,我将其调整为:
chmod ugo+x ./test
但是,我无法打开它。我明白了:
bash: ./test: No such file or directory
我确定文件存在,因为我可以在vim中打开它(我可以在第一行看到ELF)。这是怎么回事?
答案 0 :(得分:0)
该消息与动态链接器有关,因为使用动态库需要更多的努力。简单的方法是链接到静态C库(/usr/lib32/libc.a)。但是,如果你只是打电话给你的入口点" main"并将其链接为普通的C程序(gcc -m32 -o test test.o),它也可以工作。
答案 1 :(得分:-1)
编译器中没有问题。
实际上你输错了命令。
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