gpt4 book ai didi

gcc - 如何在 NASM 中导出符号

转载 作者:行者123 更新时间:2023-12-01 11:28:44 28 4
gpt4 key购买 nike

我的函数不是由 NASM 汇编程序导出的,因此我无法将它与我的 C 程序链接。我正在使用 export指令像手册说的,但它不被识别。怎么了?这是我如何做到的:

[niko@dev1 test]$ cat ssefuncs.S 
use64
section .data
NEW_LINE_4_SSE db '1111111111111111'

section .text

export find_nl_sse

find_nl_sse:
mov rax,NEW_LINE_4_SSE
movntdqa xmm0,[esi]
pcmpestri xmm0,[rax],0x0

ret

[niko@dev1 test]$ nasm -f elf64 -o ssefuncs.o ssefuncs.S
ssefuncs.S:7: error: parser: instruction expected
[niko@dev1 test]$

如果我省略 export ,重新编译程序集并尝试链接,生成的代码不会与我的 C 程序链接:
[niko@dev1 test]$ gcc -o bench3 ssefuncs.o bench3.o
bench3.o: In function `main':
/home/niko/quaztech/qstar/test/bench3.c:34: undefined reference to `find_nl_sse'
collect2: error: ld returned 1 exit status
[niko@dev1 test]$

我也尝试添加 global指令,但我得到了同样的错误。为什么 NASM 文档如此具有误导性?

最佳答案

这是将标签定义为在当前 assembly 单元之外可见的正确方法。

global _main 
_main:
  • global声明必须在实际标签之前
  • 标签必须以单个下划线开头

  • C 文件会将标签引用为
    extern _main

    关于gcc - 如何在 NASM 中导出符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35135971/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com