C函数如何运行;Exp";是否在NASM for Linux中正确使用?
我正在尝试在Linux的NASM中实现C函数“exp”。该函数取一个双倍值x,并返回一个双倍值r=e^x,其中e是欧拉数。这是我的实现:C函数如何运行;Exp";是否在NASM for Linux中正确使用?,c,linux,nasm,exp,C,Linux,Nasm,Exp,我正在尝试在Linux的NASM中实现C函数“exp”。该函数取一个双倍值x,并返回一个双倍值r=e^x,其中e是欧拉数。这是我的实现: extern exp SECTION .bss doubleActual: resq 1 doubleX: resq 1 SECTION .text main: ;some other code here ;calculate actual result push doubleActual ; plac
extern exp
SECTION .bss
doubleActual: resq 1
doubleX: resq 1
SECTION .text
main:
;some other code here
;calculate actual result
push doubleActual ; place to store result
push doubleX ;give the function what x is.
call exp
add esp, 8
在编译尝试时,我得到以下结果:
hw7_3.o: In function `termIsLess':
hw7_3.asm:(.text+0xf9): undefined reference to `exp'
这是指我实际调用exp的时候,这很奇怪,因为“extern exp”似乎工作得很好。我做错了什么?通过
我需要使用gcc执行以下操作:
gcc -m32 name.o -lm -o name
“-lm”标记是链接C数学库的快捷方式,它与标准库是分开的。是否链接到定义它的库?使用NASM for linux,这通常是不必要的。例如,我可以“extern printf”,然后立即能够在代码中使用“call printf”。我假设这是C函数所独有的。我猜您需要一个
-lm
来链接cmath库。请原谅我的无知,但我该怎么做?我以前不需要联系NASM。我当前的编译例程是:“nasm-f elf32 name.asm”,后跟“gcc-m32 name.o-o name”,其中name是我的程序名。您不需要为其他函数做任何事情,因为您让gcc为您做链接,它总是链接到libc
。但它不会隐式链接到libm
。