Опции GCC -lm -lz -lrt - о чем они? - PullRequest
20 голосов
/ 14 апреля 2011

Я знаю, что это некоторые общие / базовые библиотеки, но что они конкретно означают?

Например, я знаю, что -lm - это какая-то математическая библиотека, но это стандартная математическая библиотека или что?

-lz для сжатия?Какое сжатие?

И я понятия не имею, что это такое - -lrt.


Может ли кто-то указать эти вещи:

  • математическая библиотека - то же самое, что мы используем, когда включаем <cmath> или <math.h>?
  • библиотека сжатия - что это значит - предоставляет некоторые инструменты, которые мы можем использовать для сжатия файлов, или помогает компилятору / компоновщику выполнять некоторые операции сжатия?

Ответы [ 5 ]

20 голосов
/ 14 апреля 2011
3 голосов
/ 14 апреля 2011

-lz ссылается на zlib , -lm на math и -lrt на расширение реального времени.

2 голосов
/ 14 апреля 2011

Ключ -lX обычно означает загрузку библиотеки libX.so.

libm - стандартная математическая библиотека;он содержит sin (), cos (), atanh () и все такое.

libz - это Zlib, библиотека сжатия, которая может выполнять gzip, deflate и некоторые другие форматы.* Есть несколько разных librt: один - расширения POSIX в реальном времени;другая - библиотека вспомогательных средств программирования общего назначения.

1 голос
/ 21 января 2015

Все ответы выше верны.Единственное, что я хотел бы добавить, будучи новичком на C, это то, что аргумент -l говорит компилятору связать ваш код с некоторой библиотекой.

Путаница для меня и, вероятно, для других заключается в том, что при вызове -l плюс имя библиотеки отсутствует пробел.поэтому -lz, вы ссылаетесь на "z"

Обратите внимание, что эти библиотеки установлены в вашей системе.Либо они пришли с дистрибутивом, который вы используете, либо вы установили с помощью менеджера пакетов, либо скомпилировали из исходного кода (make, make install ...).Так как это очень простые (и старые) библиотеки APIS, они имеют очень короткие имена.По мере того, как вы прогрессируете и устанавливаете определенные библиотеки в вашей системе, вы видите больше подробных имен, помечающих -l там.

1 голос
/ 14 апреля 2011

libm http://refspecs.freestandards.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/libm.html

libz http://refspecs.freestandards.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/libzman.html

librt http://www.rdg.ac.uk:8081/cgi-bin/cgiwrap/wsi14/poplog/man/3LIB/librt

Все они являются стандартными C afaik, возможно, включены в libstdc ++ (ваш вопрос помечен C ++).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...