You need to link with the math library:
gcc -o sphere sphere.c -lm
The error you are seeing: error: ld returned 1 exit status is from the linker ld (part of gcc that combines the object files) because it is unable to find where the function pow is defined.
Including math.h brings in the declaration of the various functions and not their definition. The def is present in the math library libm.a. You need to link your program with this library so that the calls to functions like pow() are resolved.
[C Programming] Undefined reference to pow and sqrt
you have to call gcc with -lm: https://stackoverflow.com/questions/1033898/why-do-you-have-to-link-the-math-library-in-c
More on reddit.com"Undefined reference to pow" error after including <math.h> and the GCC option -lm
c - pow function not working properly in Code::Blocks IDE - Stack Overflow
ide - c language math library error when compiling (pow) - Stack Overflow
Videos
I'm trying to do my homework which is to make a program that calculates a hypotenuse, given two cathetus entered by the user. This is the code:
#include <stdio.h>
#include <math.h>
#include <locale.h>
int main(void) {
float primeiroCateto;
float segundoCateto;
float hipotenusa;
setlocale(LC_ALL, "Portuguese");
printf("Digite o valor do primeiro cateto:\n");
scanf("%f", &primeiroCateto);
printf("Digite o valor do segundo cateto:\n");
scanf("%f", &segundoCateto);
hipotenusa = sqrt(pow(primeiroCateto, 2) + pow(segundoCateto, 2));
printf("A hipotenusa é igual a:\n%.2f", hipotenusa);
return 0;
}
The problem is that when i try to copile the code using:
gcc -Wall -Wextra -o Atividade2_exercício5 Atividade2_exercício5.c
This error shows up:
/tmp/ccFsAgvS.o: In function `main': Atividade2_exercício5.c:(.text+0x82): undefined reference to `pow' Atividade2_exercício5.c:(.text+0x9d): undefined reference to `pow' Atividade2_exercício5.c:(.text+0xa7): undefined reference to `sqrt' collect2: error: ld returned 1 exit status
So what to do now? (i'm using vccode by the way)
Hey y'all, as the title says, I'm a wee bit stuck trying to use the math.h library function "pow". Here's my code -
#include <math.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
//OMITTED CODE
size_t i;
double j;
int k;
for(i = argLen - 1, k = 0; k < argLen; i--, k++) {
j = pow(16, i);
deciVals[k] = deciVals[k] * j;
}
//OMITTED CODE
return 0;
}Despite having math.h included, and using the -lm option for the GCC, I'm still getting this error -
>gcc -lm -o output hexConverter.c /usr/bin/ld: /tmp/ccghjuxO.o: in function `main': hexConverter.c:(.text+0x237): undefined reference to `pow' collect2: error: ld returned 1 exit status
Any help would be appreciated, thanks guys.
The return value of pow() is double as you can see here:
http://www.tutorialspoint.com/c_standard_library/c_function_pow.htm
So you have to cast the return value to int like this:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
printf("Hello world! %d\n",(int)pow(2,2));
return 0;
}
Otherwise as you saw is the output 0!
Another example to show this you can try this:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
printf("Hello world! %d\n",4.000000);
return 0;
}
As you will see the output is also 0 because it's a double value!
printf("Hello world! %d\n",pow(2,2));
"The output of this code should be Hello world! 4 right?"
No. As this is undefined behavior, anything can happen. As @Mureinik posted what likely happens in this errant situation, you could have a possible understanding of why you saw 0. But in the end, C does not have to perform this way.
... If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.. C11 §7.21.6.1 9
Casting to (int) is a problem too.
1) int range is much smaller than double and for pow(2,100), that fails.
2) Casting to int truncates the fractional portion on the result of double and the preciseness of pow() is not defined. This will given surprising result when the pow() is something like 7.99999999999999 and 7 is printed rather than the hoped for 8.000000.
If code needs an integer power function, consider unsigned long long int pow or https://stackoverflow.com/a/213897/2410359 or search around.