Я смущен, почему вы должны набрать -lm, чтобы правильно связать математику с вашим кодом, но не нужно делать то же самое для stdio. Я только начал использовать C, поэтому прошу прощения, если это глупый quesiton, или я пропускаю что-то очевидное.<stdio.h> vs <math.h> - Зачем вам связывать одно, а не другое?
ответ
Есть две разные вещи:
- файлы заголовков (
stdio.h
иmath.h
) - они содержат только прототипы функций и некоторые определения и данных; они#include
d в исходном коде - библиотеки (
libm.so
) - они содержат двоичный код, который будет связан обратно в приложение (двоичного кода). Кроме того, для библиотеки с именемlibname.so
флаг компоновщика-lname
- дляlibm.so
- флаг-lm
.
Примите во внимание, что существуют libc.so
и libstdc.so
, которые всегда связаны с вашим приложением. Код для функций в stdio.h
и stdlib.h
и некоторые другие находятся в этих библиотеках - таким образом, он всегда включен.
PS: Я предполагаю Linux/UNIX здесь, поэтому имена очень специфичны. В Windows вещи похожи, но с другими названиями (DLL вместо .so
файлов и т.д.)
Имена 'libm.so',' libc.so' и т. Д. Очень специфичны для системы. Но тогда также необходимо использовать '-lm' для связывания математической библиотеки. –
Спасибо, упомянул, что в PS. –
Короче говоря, из-за исторических причин,
Функции в stdio.h
в libc
, в то время как функции math.h
в libm
. libc
связан по умолчанию, но libm
нет.
- 1. ObservableCollection <> не будет связывать изменения
- 2. Передайте одно значение в <a href >, эхо другое?
- 3. CSS, почему одно работает, а не другое?
- 4. Оператор << перегрузка шкурок другое
- 5. Зачем вам нужно связывать библиотеки и устанавливать каталоги include
- 6. lxml преобразует «<» в <. Зачем?
- 7. Nullable <= vs == результат сравнения
- 8. зачем определять lt, когда оператор <существует?
- 9. std :: cout << cstring; печатает значение элементов cstring, а не шестнадцатеричный адрес cstring. Зачем?
- 10. перегрузка << оператор с ostream не работает. Зачем?
- 11. SkipList <T> vs Словарь <TKey,TValue>
- 12. JMockit - Ожидания против MockUp <T> Почему одно работает, а другое нет?
- 13. asp.net веб-формы связывать только <%# %>
- 14. <? Php vs <? ...Это имеет значение?
- 15. ASP.NET <%= %> vs <%: %>
- 16. <applet> vs <object>
- 17. <doctype> VS <!DOCTYPE>
- 18. ObservableCollection <> vs. List <>
- 19. Ruby on Rails Синтаксис <% vs <% =
- 20. const_cast <int*> не работает. Зачем?
- 21. GameObject.FindObjectOfType <>() vs GetComponent <>()
- 22. Зачем связывать сокет
- 23. Зачем связывать сглаживание списка?
- 24. Зачем и как перегружать оператора << для печати
- 25. ASP.NET <% # versus <%
- 26. Оператор! = Vs <>
- 27. Минимизировать одно окно, а другое показывает
- 28. Зачем использовать 1 << 4 вместо 16?
- 29. JQuery: Почему одно работает, а другое нет?
- 30. Почему максимальная емкость Java HashMap 1 << 30, а не 1 << 31?
http://stackoverflow.com/questions/1033898/why-do-you-have-to-link-the-math-library-in-c?rq=1 – verbose
'* .h' файлы являются файлами заголовков , файлы заголовков ** не ** связаны, заголовки ** 'include'ed **! – alk