【发布时间】:2016-05-10 05:24:20
【问题描述】:
我的函数不是由 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 文档如此具有误导性?
【问题讨论】:
-
我有两个想法:1. 尝试将
export find_nl_sse移动到section .text之前,也可以尝试使用global而不是export。 2. 在 asm 中将其命名为_find_nl_sse,在 C 中命名为find_nl_sse。 -
global和export做不同的事情。 -
@MarinovIván ,它没有帮助。将导出/全局移出 .text 部分后出现同样的错误