2010-04-25 10 views
0

J'ai dû compiler un petit petit programme C en utilisant ce qui suit;Question sur les commandes du compilateur gcc

gcc -o sine.c sine -lm

je avais besoin "-lm" parce que le programme comprenait le math.h. En recherchant cela dans les commandes du compilateur, man montre qu'il s'agit d'une bibliothèque -library ou -l.

Je n'ai trouvé aucune information sur les autres bibliothèques. Apparemment, -lm est nécessaire pour math.h quelles autres commandes de bibliothèque pourraient être nécessaires.

Merci

+4

Vous avez besoin des bibliothèques dont vous avez besoin. Il y a un nombre presque infini d'entre eux que vous utilisez comme votre application l'exige. –

+1

Il est à noter que la bibliothèque récupérée par '-lfoo' est en fait' libfoo.so'. La partie de la bibliothèque standard c incluse avec 'math.h' est conservée dans' libm' plutôt que dans 'libc'. On peut supposer qu'il y a des raisons historiques à cela, mais je ne pourrais pas dire de quoi il s'agit. – dmckee

+1

ou 'libfoo.a' etc – kennytm

Répondre

5

-lm moyens pour relier la bibliothèque « m », qui comme vous le dites contient des trucs de mathématiques. Si vous avez besoin d'autres bibliothèques pour votre code, votre documentation pour ces fonctions le montrera.

+0

Techniquement, cela signifie de * lier * la bibliothèque" m ", ne pas charger –

+0

Bien charger d'abord, puis lier :) – Blindy

-1

S'il est lié sans erreur, vous n'avez besoin de rien d'autre. En fait, vous n'avez même pas besoin de spécifier -lm, car elle et la bibliothèque C standard sont liées automatiquement.

+0

Je pense que' -lm' était juste un exemple ici ... –

+2

gcc adopte l'approche idiosyncratique de la bibliothèque de maths - cela amène à beaucoup de plaisir quand les étudiants font leur première expérience de gcc. –

+1

La bibliothèque mathématique n'est pas liée automatiquement. Les opérations exactes dans libm dépendent cependant de l'architecture du système d'exploitation et du processeur. – bdonlan

Questions connexes