如何在64位ubuntu上安装32位glibc

时间:2014-05-31 13:38:47

标签: c x86 32bit-64bit gnu glibc

我正在尝试用汇编语言学习C调用约定。为此,我使用C标准库中的puts函数创建了一个简单的程序。

我使用以下命令组装并链接了该程序: -

nasm -f elf file.asm gcc -m32 file.asm -o file

nasm会生成正确的目标文件,但在运行gcc链接目标文件时,我收到错误 看看这个错误,我发现我的系统上没有32位版本的glibc。我该怎么安装呢我已经安装了this软件包。

我有64位ubuntu 12.04作为我的操作系统。

编辑: - 我已安装以下软件包,但问题仍未解决: -

1)IA32-库
2)libc6-i386

3 个答案:

答案 0 :(得分:16)

此命令将在64位Ubuntu上安装32位glibc库:

sudo apt-get install gcc-multilib

这是使用gcc:

将汇编对象代码编译为可执行文件的正确语法
gcc -m32 objectfile.o -o executablefile

答案 1 :(得分:1)

  

我使用以下命令组装并链接了该程序: -   nasm -f elf file.asm   gcc -m32 file.asm -o file

这是错误的。您的第一个nasm命令可能正在创建file.o文件(您应该检查该文件,例如使用ls -l file.o)。第二个gcc命令没有按照您的意愿执行。

gcc不了解*.asm文件扩展名(它知道.S可预处理的GNU汇编语法,.s代表汇编程序代码,但可能处理未知扩展像.asm一样默认为ELF对象文件,但file.asm 是ELF对象文件。你应该尝试用

链接
gcc -Wall -v -m32 file.o -o file

请注意,您GCC object file ELF linker calling conventions x86-64 ABI spec ELF readelf gcc }。

(您稍后可能会将nasm选项移至-v

或者,使用GNU gcc汇编语法(不是 nasm ),命名文件as(如果您希望对其进行预处理)或{{1 (没有预处理)并使用file.S来编译它。

BTW,要了解有关https://docs.angularjs.org/error/的更多信息,请阅读http://ichion.tk(以及类似的32位x86 ...),制作一个小的C示例文件file.s,然后运行gcc -v -Wall -m32 file.s -o myprog并使用编辑器或寻呼机查看生成的some-example.c

了解有关{{3}}的更多信息,然后恰当地使用{{3}}(& gcc -S -fverbose-asm -O some-example.c)。

答案 2 :(得分:0)

您想要安装名为' ia32-libs'

的软件包