assembly - Cygwin:重新定位被截断以适合 R_X86_64_32S 对 '.data'

标签 assembly cygwin linker-errors

我最近试图从“从头开始编程”一书中编译“找到最大值”程序。由于我使用的是 Windows,因此我使用 Cygwin 编译程序集文件。但是,我收到以下错误:

/tmp/ccuamKmO.o:fake:(.text+0xc): relocation truncated to fit: R_X86_64_32S against `.data'
/tmp/ccuamKmO.o:fake:(.text+0x1d): relocation truncated to fit: R_X86_64_32S against `.data'
collect2: error: ld returned 1 exit status

这可能是一些愚蠢的错误,我真的无法识别。
这是程序的代码:
.section .data
    data_items: 
        .long 3, 67, 34, 222, 45, 75, 54, 34, 44, 33, 22, 11, 66, 0

.section .text
    .globl main

main:
    jmp find_largest
  ret_find_largest:

    ret

/* 
 * %edi - Holds the index of the item being examined
 * %ebx - Largest item found
 * %eax - Current item
 */
find_largest:
    movl $0, %edi
    movl data_items(,%edi,4), %eax /* load eax with first item */
    movl %eax, %ebx

  start_loop:
    cmpl $0, %eax
    je loop_exit
    incl %edi
    movl data_items(,%edi,4), %eax
    cmpl %ebx, %eax
    jle start_loop
    movl %eax, %ebx
    jmp start_loop

  loop_exit:
    jmp ret_find_largest

最佳答案

看来您的汇编程序代码适用于 32 位机器,但您正在为 x64 进行组装。尝试添加 -m32在命令行上。

关于assembly - Cygwin:重新定位被截断以适合 R_X86_64_32S 对 '.data',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25491859/

相关文章:

visual-studio-2010 - 指定的文件是无法识别或不受支持的二进制格式

python - 如何在 Windows 中隐藏 Cygwin Python 控制台窗口?

interop - 与 C 版本 SDL2 链接时对 D 隐藏控制台

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

ubuntu - Linux汇编编程中64位整数的关键字

bash - unzip : gives: checkdir error: . ../directory 存在但不是目录

windows - 如何使 babun/cygwin 主目录等于 windows 主目录?

assembly - Go 没有链接我的程序集 : undefined external function

assembly - Haswell/Skylake 上的部分寄存器究竟如何执行?写AL好像对RAX有假依赖,AH不一致

assembly - x86 Assembly 为什么使用 Push/Pop 而不是 Mov?