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

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

【测试环境】
CentOS 5.4 (Final)x86_64
Linux version 2.6.18-164.el5. x86_64
GCC version 4.4.2 20080704

【动态链接库】

#include 

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 

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.cprogramming.com/tutorial/shared-libraries-linux-gcc.html
http://blog.csdn.net/educast/article/details/9398935
http://blog.sina.com.cn/s/blog_531bb76301013lyq.html

你可能感兴趣的:(Linux,c,动态链接库,so,编程研发,Linux内存替换)