使用GCC编译动态库(共享库)的流程主要包括以下步骤:
首先,你需要编写一些C或C++源文件。例如,假设你有两个源文件 libexample.c 和 libexample.h。
libexample.h
#ifndef LIBEXAMPLE_H
#define LIBEXAMPLE_H
void hello_from_libexample();
#endif // LIBEXAMPLE_H
libexample.c
#include <stdio.h>
#include "libexample.h"
void hello_from_libexample() {
printf("Hello from libexample!\n");
}
使用GCC将每个源文件编译成对象文件(.o 文件)。
gcc -c libexample.c -o libexample.o
使用GCC将对象文件打包成动态库(.so 文件)。通常,动态库的名称以 lib 开头,并且扩展名为 .so。
gcc -shared -o libexample.so libexample.o
-shared:指定生成共享库。-o libexample.so:指定输出文件名为 libexample.so。编译你的应用程序时,需要链接这个动态库。假设你有一个主程序 main.c。
main.c
#include <stdio.h>
#include "libexample.h"
int main() {
hello_from_libexample();
return 0;
}
编译主程序并链接动态库:
gcc main.c -L. -lexample -o myapp
-L.:指定库文件的搜索路径为当前目录。-lexample:链接名为 libexample.so 的库(去掉 lib 前缀和 .so 后缀)。-o myapp:指定输出可执行文件名为 myapp。确保动态库在运行时可被找到。你可以将动态库复制到系统的标准库路径(如 /usr/lib 或 /usr/local/lib),或者在运行时设置 LD_LIBRARY_PATH 环境变量。
export LD_LIBRARY_PATH=.
./myapp
如果你不再需要中间文件,可以删除它们。
rm libexample.o libexample.so
通过这些步骤,你可以成功地使用GCC编译和使用动态库。