【发布时间】:2014-10-25 12:24:26
【问题描述】:
包含和链接到底有什么作用?有什么区别?为什么我需要同时指定它们?
当我写#include math.h然后写-lm编译它,#include math.h和-lm分别是做什么的?
据我了解,在链接库时,您需要它的 .h 文件和它的 .o 文件。这是否暗示#include math.h 意味着接受.h 文件而-lm 接受.o 文件?
【问题讨论】:
-
阅读Levine's book: Linkers and Loaders;你很困惑:头文件用于编译,目标文件用于链接。
-
c-faq 中提供了简短说明。 “在外部库中调用代码的一般情况下,使用#include 拉入正确的头文件只是故事的一半;您还必须告诉链接器搜索外部库本身。头文件只告诉编译器如何调用外部函数;头文件不提供外部函数的定义,或者告诉编译器/链接器在哪里可以找到这些定义。"
-
谢谢,Basile Starynkevitch 和 remyabel !!我发现这两个来源都非常有帮助!
-
#include ...处理文本,源代码;链接 (-l...) 处理目标代码(二进制编译语句)。