假设项目结构:
.
├── include
│ └── greet.h
├── main.c
├── README.txt
└── src
└── greet.c
有如下编译、运行的命令:
# 直接生成可执行文件
gcc -c greet.c -I../include # 生成编译后的文件greet.o
gcc main.c ./src/greet.o -I./include -o main # 生成可执行文件main
./main # 执行main
# 生成静态库、可执行文件
gcc -c greet.c -I../include # 生成编译后的文件greet.o
ar rs libgreet.a greet.o # 由greet.o生成libgreet.a静态库
gcc main.c -I./include -L./src -lgreet -o main_with_static_lib # 生成可执行文件 main_with_static_lib
./main_with_static_lib # 执行main
# 生成动态库、可执行文件
gcc greet.c -I../include -c -fPIC # 生成编译后的文件greet.o
gcc -shared -o libgreet.so greet.o # 生成动态库libgreet.so
gcc main.c -I./include -L./src -lgreet -o main_with_shared_lib # 生成可执行文件 main_with_shared_lib
LD_LIBRARY_PATH=./src ./main_with_shared_lib # 指定动态库所在路径并执行main.