首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NASM中如何导出符号

在NASM中如何导出符号
EN

Stack Overflow用户
提问于 2016-02-01 16:54:50
回答 1查看 3.6K关注 0票数 5

我的功能不是由NASM汇编程序导出的,因此我不能将它与我的C程序连接起来。我正在使用export指令,就像手册上说的那样,但是它没有被识别。怎么啦?我就是这样做的:

代码语言:javascript
复制
[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程序链接:

代码语言:javascript
复制
[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文档如此误导?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-01 23:08:57

以下是将标签定义为在当前组装单元之外可见的正确方法。

代码语言:javascript
复制
global _main 
_main: 
  1. global语句必须位于实际标签之前。
  2. 标签必须以单个下划线开头。

C文件会将标签引用为

代码语言:javascript
复制
extern _main
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35135971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档