繁体   English   中英

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

[英]How to install 32 bit glibc on 64 bit ubuntu

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

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

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

nasm 生成正确的目标文件,但是在运行 gcc 以链接目标文件时,出现错误。
查看错误后,我发现我的系统上没有 32 位版本的 glibc。 我该如何安装它。 我已经安装了这个包。

我的操作系统是 64 位 ubuntu 12.04。

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

1)ia32-libs
2) libc6-i386

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

sudo apt-get install gcc-multilib

这是使用 gcc 将程序集目标代码链接到可执行文件的正确语法:

gcc -m32 objectfile.o -o executablefile

(nasm -felf32 已经创建了objectfile.o.asm文件不应出现在 GCC 的命令行上objectfile.o可以使用 GAS 语法一步组装+链接.S文件,但 NASM 是一个单独的包。)

我使用以下命令组装并链接了该程序:- 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

请注意,您在ELF 中GCC 提供了一个目标文件(用于由gcc调用的链接器),该文件是您之前使用nasm

(您稍后可能会删除gcc-v选项)

或者,使用 GNU as汇编程序语法(不是nasm 语法),将文件file.S (如果您希望对其进行预处理)或file.s (不进行预处理)并使用gcc -v -Wall -m32 file.s -o myprog来编译它。

顺便说一句,要了解有关调用约定的更多信息,请阅读x86-64 ABI 规范(以及类似的 32 位 x86 ...),制作一个小的 C 示例文件some-example.c ,然后运行gcc -S -fverbose-asm -O some-example.c并使用编辑器或寻呼机查看生成的some-example.s

了解有关ELF 的更多信息,然后适当地使用readelf (& objdump )。

你想安装一个名为“ia32-libs”的包

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM