如果需要使用我们自己的带有声明的头文件和带有定义的cpp文件来编译C或CPP编译程序,我们需要在编译命令中包含带有定义的cpp文件(请参阅此答案).但是,当我们编写时#include <iostream>,我们不会iostream.cpp在编译语句中包含像g++ main.cpp iostream.cpp -o main.
如果我们编写自定义声明文件,例如hello.hpp使用类声明和hello.cpp定义,我们需要使用g++ main.cpp hello.cpp -o mainafter包含hello.hpp在main.cpp文件的头文件中来编译它.为什么是这样?
编辑:我们可以模仿我们的自定义头文件和cpp文件的标准模板库的行为,这样我们所要做的就是包含头文件并自动编译声明吗?如果是,那怎么样?如果不是,为什么不呢?
标准库正在隐式链接.所以
g++ main.cpp -o main
是真的
g++ main.cpp -o main -lstdc++ -lc
libstdc++c ++标准库在哪里,libc是c标准库.其他库需要明确链接(例如libm).
如果您将编译和链接步骤分开,这将变得更加清晰:
g++ -c main.cpp -o main.o
g++ -c other.cpp -o other.o
g++ main.o other.o /usr/lib/libstdc++.a /usr/lib/libc.a -o main
在这里,我们将main()函数定义和其他定义(other.cpp)编译成目标文件,并将它们与标准库中现有的编译函数/类/变量定义相结合.
有关如何将定义文件(和)转换为库的详细信息,请参阅共享库创建和 
 静态库创建的 TLDP页面..c.cpp