Question

    

Cette question a déjà une réponse ici:

         

Je ne sais pas si je me manque quelque chose d'évident, mais il semble que je suis incapable de calculer des racines carrées d'un variable dans C; la fonction sqrt () semble ne fonctionner que sur des constantes. Ceci est mon code:

#include <math.h>
#include <stdio.h>

int main()
{
    double a = 2.0;
    double b = sqrt(a);
    printf("%f", b);
    return 0;
}

Quand je lance ce programme, je reçois l'erreur suivante:

gcc -Wall -o "test2" "test2.c" (in directory: /home/eddy/Code/euler)
/tmp/ccVfxkNh.o: In function `main':
test2.c:(.text+0x30): undefined reference to `sqrt'
collect2: ld returned 1 exit status
Compilation failed.

Cependant, si je remplace l'argument sqrt () avec une constante telle que 2.0 par exemple, (b = sqrt(2.0)), il fonctionne très bien. Est-ce sqrt () pas censé travailler avec des variables ou quelque chose?

Merci pour l'aide

Était-ce utile?

La solution

Vous devez faire le lien avec la bibliothèque mathématique (utilisez un sur la ligne de commande « -lm »). Dans le cas constant, le compilateur est probablement être intelligent et précalculer sqrt (2.0) (pour le code qui est compilé est essentiellement « b = 1,414 ...; »)

Autres conseils

Vous avez probablement besoin d'ajouter -lm lorsque vous compilez. Lorsque vous prenez la racine carrée d'une constante, le compilateur optimise le code en prenant la racine carrée alors qu'il compile, il ne se sert pas du tout sqrt.

Utilisez la commande gcc -Wall -o "test2" "test2.c" -lm qui sera probablement résoudre ce problème.

Cela inclut la bibliothèque de mathématiques en plus de la bibliothèque standard d'exécution C. Sur la plupart des systèmes, la bibliothèque mathématique est historiquement une entité distincte qui doit être explicitement demandé.

En cas de gcc vous devez lier la bibliothèque.

gcc filename.c -lm.

Toutefois, en cas de g ++ pas besoin de lier la bibliothèque pour que cela fonctionne bien:

g ++ filename.c -o filename Une fois que la compilation est réussie.

Pour exécuter il suffit d'entrer ./filename dans G ++. et entrez dans ./a.out gcc.

Compile avec:

gcc -Wall -o test2 test2.c -lm

Vous devez lier à la bibliothèque de mathématiques.

inclure la bibliothèque de mathématiques utilisant l'opérateur ""

#include " math.h "

programme de compilation en utilisant l'option -lm pour la bibliothèque Hériter de mathématiques supposons que notre nom du programme est la test.c nous compilons comme suit

gcc test.c -lm

gcc ne lie pas les bibliothèques standard par défaut. Donc, il vous suffit de le faire si la compilation via gcc:

gcc filename.c -lm .

Toutefois, en cas de g ++ pas besoin de lier la bibliothèque pour que cela fonctionne bien:

g ++ filename.c -o filename

Cela fonctionne bien pour moi. Je pense qu'il ya un problème avec ur bibliothèque mathématique. Essayez lier à nouveau et voir. Autre code sage est tout à fait parfait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top