NASM - The Netwide Assembler
NASM Forum => Using NASM => Topic started by: nulik on February 01, 2016, 07:46:51 PM
-
Hi.
My function is not exported by NASM assembler and therefore I can not link it with my C program. I am using the 'export' directive like the manual says, but it is not recognized. What is wrong ? Here is how I do it:
[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]$
If I omit the "export", recompile the assembly and try to link, the resulting code won't link with my C program:
[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]$
I also tried to add the 'global' directive but I get the same error.
What is wrong here?
-
Hi Nulik,
As the Friendly Manual should tell you, "export" is a format-specific directive. It's to "export" a symbol from a .dll in the Windows world. It doesn't mean anything in "-f elf64". "global", however, should be what you want. Try that again and get back to us with exactly what happens.
global find_nl_sse
... shouldn't need a leading underscore, I don't think...
Best,
Frank
-
no it does not need _ (underscore)
works perfectly, thanks!