在Linux系统下编译多个源文件通常涉及以下几个基础概念:
.c
或 .cpp
为扩展名。.o
为扩展名。假设我们有两个源文件 main.c
和 utils.c
,以及一个头文件 utils.h
。
main.c
#include "utils.h"
#include <stdio.h>
int main() {
printf("Sum is: %d\n", add(5, 3));
return 0;
}
utils.c
#include "utils.h"
int add(int a, int b) {
return a + b;
}
utils.h
#ifndef UTILS_H
#define UTILS_H
int add(int a, int b);
#endif
使用 gcc
编译每个源文件生成对应的目标文件:
gcc -c main.c -o main.o
gcc -c utils.c -o utils.o
-c
选项告诉编译器只编译不链接。-o
选项指定输出文件名。将所有目标文件链接在一起:
gcc main.o utils.o -o myprogram
-o myprogram
指定最终生成的可执行文件名为 myprogram
。现象:编译时报错 fatal error: utils.h: No such file or directory
。
原因:编译器找不到指定的头文件。
解决方法:
-I
选项指定头文件搜索路径:-I
选项指定头文件搜索路径:现象:报错 undefined reference to 'add'
。
原因:链接器找不到函数的定义。
解决方法:
完整的编译命令:
gcc -Iinclude -c main.c -o main.o
gcc -Iinclude -c utils.c -o utils.o
gcc main.o utils.o -o myprogram
通过以上步骤,可以在Linux系统下成功编译并链接多个源文件,生成可执行程序。
领取专属 10元无门槛券
手把手带您无忧上云