[英]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
。
你想安装一个名为“ia32-libs”的包
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.