Linux中的动态库(Dynamic Library)是一种在程序运行时被加载的共享库,它允许多个程序共享同一份库代码,从而节省内存空间并提高执行效率。动态库通常以.so
(Shared Object)为扩展名。
头文件(Header File):
头文件通常包含函数声明、宏定义、类型定义等,它们用于告诉编译器函数的接口和使用方法。头文件的扩展名通常是.h
。
动态库: 动态库在程序运行时由操作系统动态加载到内存中。与静态库不同,动态库不会被编译进最终的可执行文件中,而是在程序启动时或按需加载。
.so
为扩展名。.dll
为扩展名。假设我们有一个简单的动态库和一个使用该库的应用程序。
libexample.c
)#include "libexample.h"
void hello() {
printf("Hello from the library!\n");
}
头文件 (libexample.h
)
#ifndef LIBEXAMPLE_H
#define LIBEXAMPLE_H
void hello();
#endif
gcc -shared -o libexample.so libexample.c
main.c
)#include "libexample.h"
int main() {
hello();
return 0;
}
gcc -o main main.c -L. -lexample
这里 -L.
表示在当前目录查找库,-lexample
表示链接名为 libexample.so
的库。
问题:运行程序时提示找不到动态库。
原因:操作系统无法找到动态库文件。
解决方法:
LD_LIBRARY_PATH
环境变量,包含动态库所在的目录。export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library
/usr/lib
或 /usr/local/lib
。以上面的例子为例,完整的编译和运行步骤如下:
# 编译动态库
gcc -shared -o libexample.so libexample.c
# 编译应用程序
gcc -o main main.c -L. -lexample
# 运行程序前设置库路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
# 运行程序
./main
这样,你就可以看到输出 "Hello from the library!",表明动态库被成功加载和使用。
领取专属 10元无门槛券
手把手带您无忧上云