【问题标题】:How to install 32 bit glibc on 64 bit ubuntu如何在 64 位 ubuntu 上安装 32 位 glibc
【发布时间】:2014-07-21 03:54:56
【问题描述】:

我正在尝试学习汇编语言中的 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-libs
2) libc6-i386

【问题讨论】:

  • 如果您需要帮助解决任何错误,发布错误消息的确切文本总是有意义的。

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


【解决方案1】:

您想安装一个名为“ia32-libs”的软件包

【讨论】:

    【解决方案2】:

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

    sudo apt-get install gcc-multilib
    

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

    gcc -m32 objectfile.o -o executablefile
    

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

    【讨论】:

    • @BasileStarynkevitch 那么必须解释为什么。发布代码只教任何东西
    • 感谢您的反馈。我已经详细说明了我的答案。我只是想分享我用来获取 32 位 glibc 库的命令。
    • 这帮助我在 x64 上使用 debien 交叉编译 ARM,从 2015 年第二季度开始使用 arm-none-eabi-gcc。
    【解决方案3】:

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

    请注意,您在之前使用nasm 生成的ELF(用于linker 调用的linker)中给GCCobject file

    (您以后可能会将-v 选项删除到gcc

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

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

    进一步了解ELF,然后适当地使用readelf(&objdump)。

    【讨论】:

      猜你喜欢
      • 2016-11-08
      • 2014-01-20
      • 2015-09-14
      • 2013-03-04
      • 2011-03-02
      • 2014-03-14
      • 2012-03-19
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多