Why Am I Getting Link Errors When Calling Function in Math.h?

前端 未结 3 1568
广开言路
广开言路 2020-12-11 06:50

When attempting to call functions in math.h, I\'m getting link errors like the following

undefined reference to sqrt

But I\'

相关标签:
3条回答
  • 2020-12-11 07:16

    You need to link the math library explicitly. Add -lm to the flags you're passing to gcc so that the linker knows to link libm.a

    0 讨论(0)
  • 2020-12-11 07:25

    Add -lm to the command when you call gcc:
    gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm

    This will tell the linker to link with the math library. Including math.h will tell the compiler that the math functions like sqrt() exist, but they are defined in a separate library, which the linker needs to pack with your executable.

    As FreeMemory pointed out the library is called libm.a . On Unix-like systems, the rule for naming libraries is lib[blah].a . Then if you want to link them to your executable you use -l[blah] .

    0 讨论(0)
  • 2020-12-11 07:29

    Append -lm to the end of the gcc command to link the math library:

    gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm
    

    For things to be linked properly, the order of the compiler flags matters! Specifically, the -lm should be placed at the end of the line.

    If you're wondering why the math.h library needs to be included at all when compiling in C, check out this explanation here.

    0 讨论(0)
提交回复
热议问题