我的函數沒有被NASM彙編器導出,因此我無法將其與我的C程序鏈接。我正在使用手冊中說的export
指令,但它不被識別。哪裏不對?下面是我如何做到這一點:如何導出NASM中的符號
[[email protected] 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
[[email protected] test]$ nasm -f elf64 -o ssefuncs.o ssefuncs.S
ssefuncs.S:7: error: parser: instruction expected
[[email protected] test]$
如果我省略了export
,重新編譯安裝和嘗試鏈接,生成的代碼不會與我的C程序鏈接:
[[email protected] 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
[[email protected] test]$
我也嘗試過添加global
指令但我得到相同的錯誤。 NASM文件爲何如此誤導?
我開始提出兩個想法:1.在'section .text'之前嘗試移動'export find_nl_sse',同時嘗試'global'而不是'export'。 2.在asm中命名爲'_find_nl_sse'並在C'find_nl_sse'中。 –
'global'和'export'做不同的縮寫。 – fuz
@MarinovIván,它沒有幫助。將.text部分移出export/global後出現同樣的錯誤 – Nulik