1

我已经编写了一个 32 位汇编文件,我想在 64 位 Linux 系统上编译它(并让它工作)。我已经安装gcc-multiliblib32-glibc.

我尝试使用以下命令创建二进制文件:

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

但是,我无法打开它。我得到:

bash: ./test: No such file or directory

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

4

2 回答 2

0

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

于 2012-08-11T00:49:39.063 回答
-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
于 2014-04-19T13:24:38.547 回答