【问题标题】:Problems compiling x86 assembly on x64 linux在 x64 linux 上编译 x86 程序集的问题
【发布时间】:2015-12-17 16:07:16
【问题描述】:

我尝试在 x64 ubuntu 上编译用 X86 编写的汇编代码,得到以下错误:

gcc -m32 -o T Tirgul3b_Hello.s
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find -lc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find crtn.o: No such file or directory
collect2: error: ld returned 1 exit status

这是我尝试编译的代码:

    #This is a simple "Hello World!" program
    .section    .rodata #read only data section
str:    .string "Hello World!\n"
    ########
    .text   #the beginnig of the code
.globl  main    #the label "main" is used to state the initial point of this program
    .type   main, @function # the label "main" representing the beginning of a function
main:   # the main function:
    pushl   %ebp        #save the old frame pointer
    movl    %esp,   %ebp    #create the new frame pointer

    pushl   $str        #the string is the only paramter passed to the printf function.
    call    printf      #calling to printf AFTER we put its parameters in the stack.

    #return from printf:
    movl    $0, %eax    #return value is zero (just like in c - we tell the OS that this program finished seccessfully)
    movl    %ebp,   %esp    #restore the old stack pointer - release all used memory.
    popl    %ebp        #restore old frame pointer (the caller function frame)
    ret         #return to caller function (OS)

我在这里缺少什么以及如何解决它?

如果您需要任何额外信息,请在 cmets 中询问。

【问题讨论】:

  • 尝试安装多库版本的 gcc 和 g++。 sudo apt-get install gcc-multilib g++-multilib
  • 成功了。有预感它缺少库,但不知道有什么方法可以找出哪个。要写答案以便我接受,还是应该这样做?
  • 您可以回答,但它类似于我过去在该主题上看到的其他一些问题。您的问题不是重复的,但不是新问题。

标签: linux gcc assembly x86


【解决方案1】:

正如 Michael Petch 所说,安装 gccg++ multilib 库就可以了。我安装了:

sudo apt-get install gcc-multilib g++-multilib

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多