红联Linux门户
Linux帮助

[LinuxC]加载动态链接库so程序简单实例

发布时间:2016-03-07 15:42:02来源:linux网站作者:DeargGae

本实例力求最小化实现动态链接库加载,记录下来,督促自学。


【测试环境】
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!


本文永久更新地址:http://www.linuxdiyf.com/linux/18692.html