本实例力求最小化实现动态链接库加载,记录下来,督促自学。
【测试环境】
CentOS 5.4 (Final)x86_64
Linux version 2.6.18-164.el5. x86_64
GCC version 4.4.2 20080704
【动态链接库】
#include <stdio.h>
void hello()
{
printf("Hello Myboy!\n");
}
[mycentos64@localhost ram]$ gcc -c -Wall -Werror -fPIC fso.c
[mycentos64@localhost ram]$ gcc -shared -o libfso.so fso.o
参数解释:
-c:只激活预处理、编译和汇编,只输出.o格式的obj文件
-Wall:生成所有警告信息
-Werror:将warn视为error并停止编译
-fpic:编译动态库必须,输出不依赖位置的代码
-shared:编译动态库必须选项
-o:生成的动态库名称
【加载程序】
#include <stdio.h>
extern void hello(void);
int main()
{
printf("This is Main!\n");
hello();
return 0;
}
[mycentos64@localhost ram]$ gcc -L /home/mycentos64/ram -Wall -o main main.c -lfso
参数解释:
-L:动态库存储位置
-Wall:生成所有警告信息
-o:生成程序名
-lfso:加载动态库libfso.o
【配置环境变量】
程序执行加载动态库依据环境变量LD_LIBRARY_PATH指定,除了将我们加载的动态库移动至该环境变量中已有的目录下外,还可以将我们动态库所在目录添加至该环境变量中。以下为添加目录至该环境变量的命令。
[mycentos64@localhost ram]$ export LD_LIBRARY_PATH=/home/mycentos64/ram:$LD_LIBRARY_PATH
[mycentos64@localhost ram]$ echo $LD_LIBRARY_PATH
/home/mycentos64/ram:
【执行结果】
[mycentos64@localhost ram]$ ./main
This is Main!
Hello Myboy!