编译(- c)某个源文件生成目标文件只需要路径有调用函数的头文件,链接(- o)成可执行文件需要加上实现函数的目标文件
特别说明:如果没有指定链接文件,gcc XXX.o -o AAA(包含链接过程,链接器也是用 ld )链接阶段就会使用gcc默认链接文件
gcc -c XXX.c:-c表示只编译不链接,此指令生成 XXX.o 目标文件
gcc main.o hello.o factorial.o -o XXX:链接成可执行文件 XXX
总结:编译只关心路径下是否存在 " 调用函数对应的头文件 ",链接需要把 “ 函数实现对应的目标文件 " 作为参数
main.cpp 文件的内容
#include<stdio.h> #include "functions.h" int main() { print_hello(); printf("\n"); printf("The factorial of 5 is %d\n", factorial(5)); return 0; }
hello.cpp 文件的内容
#include <stdio.h> void print_hello(){ printf("hello world"); }
factorial.cpp 文件的内容
#include <stdio.h> int factorial(int n){ if(n != 1){ return (n*factorial(n-1)); }else{ return 1; } }
functions.h 内容
void print_hello(); int factorial(int n);
main.c调用了函数 printf_hello(),所以编译main.c生成目标文件,需要路径下有functioins.h,不需要函数的源文件
main.o: main.cpp functions.h
gcc -c main.cpp
factorial.o: factorial.cpp functions.h gcc -c factorial.cpp hello.o: hello.cpp functions.h gcc -c hello.cpp
最后执行:
hello: main.o factorial.o hello.o
gcc main.o factorial.o hello.o -o hello
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2018-04-19 NB-IoT