【Linux】认识Linux下的编译器gcc/g++ | 认识动静态库
在Linux环境下,我们可以使用GCC或G++编译器来编译C/C++程序。GCC是GNU Compiler Collection的缩写,是一个能够编译多种编程语言的编译器。对于C语言程序,GCC会默认调用C预处理器、编译器、汇编器以及链接器来生成可执行文件。对于C++程序,GCC会自动调用C++的编译器来编译程序。
一、认识静态库
静态库是指编译器在编译程序的过程中,将库代码直接复制到程序中,这样程序在运行时不再需要库文件。静态库的后缀一般为.a。
- 创建静态库
首先,我们需要创建一个静态库。以下是创建静态库的步骤:
(1)编写源代码文件,例如lib.c和lib.h。
lib.c:
#include "lib.h"
void print() {
printf("Hello, this is a static library!\n");
}
lib.h:
#ifndef LIB_H
#define LIB_H
#include <stdio.h>
void print();
#endif
(2)使用ar工具创建静态库。
在命令行中输入以下命令:
gcc -c lib.c
ar rcs liblib.a lib.o
- 使用静态库
创建好静态库后,我们可以在程序中使用它。以下是使用静态库的步骤:
(1)编写源代码文件,例如main.c。
main.c:
#include "lib.h"
int main() {
print();
return 0;
}
(2)使用gcc编译器将程序与静态库链接。
在命令行中输入以下命令:
gcc main.c liblib.a -o main
二、认识动态库
动态库是在程序运行时才被载入内存的库,因此在编译程序时并不会将库代码复制到程序中,而是在程序运行时由操作系统动态地将库加载到内存中。动态库的后缀一般为.so。
- 创建动态库
首先,我们需要创建一个动态库。以下是创建动态库的步骤:
(1)编写源代码文件,例如lib.c和lib.h。
lib.c:
#include "lib.h"
void print() {
printf("Hello, this is a dynamic library!\n");
}
lib.h:
#ifndef LIB_H
#define LIB_H
#include <stdio.h>
void print();
#endif
(2)使用gcc编译器生成动态库。
在命令行中输入以下命令:
gcc -shared -fPIC lib.c -o liblib.so
- 使用动态库
创建好动态库后,我们可以在程序中使用它。以下是使用动态库的步骤:
(1)编写源代码文件,例如main.c。
main.c:
#include "lib.h"
int main() {
print();
return 0;
}
(2)使用gcc编译器将程序与动态库链接。
在命令行中输入以下命令:
gcc main.c ./liblib.so -o main
注意:在运行生成的可执行文件之前,需要将动态库的路径添加到环境变量LD\_LIBRARY_
评论已关闭