您的位置:首页 > 运维架构 > Linux

linux下动态库与静态库

2009-12-25 10:23 253 查看
体验一下linux下编写和使用动态库与静态库,范例:helloworld程序。

首先编写静态库:

hellos.h

#ifndef _HELLO_S_H
#define _HELLO_S_H
void prints(char *str);
#endif


hellos.c

#include "hellos.h"
#include <stdio.h>
void prints(char *str)
{
printf("print in static way:%s",str);
}


开始编译成静态库:

gcc -c -o hellos.o hellos.c

ar cqs libhellos.a hellos.o

main.c

#include "hellos.h"
int main(void)
{
char *text = "hello,world/n";
prints(text);
}


使用静态库编译:gcc -o hello main.c -static -L. -lhellos

然后运行hello,输出:

print in static way: Hello World!

删除

libhellos.a和

hellos.*后, 程序仍然正常运行。

编写动态库



hellod.h

#ifndef _HELLO_D_H
#define _HELLO_D_H
void printd(char *str);
#endif


hellod.c

#include "hellod.h"
#include <stdio.h>
void printd(char *str)
{
printf("print in dynamic way:%s",str);
}


编译生成动态库:gcc -shared -o libhellod.so hellod.c

这样,libhellod.so就是生成的动态库。

export LD_LIBRARY_PATH=/root/program/link/dynamic/:$LD_LIBRARY_PATH,指定库文件路径。

如果系统装了SELINUX的话,要执行chcon -t textrel_shlib_t /root/program/link/dynamic/libhellod.so改变权限。

main.c

#include "hellod.h"
int main(void)
{
char *text = "hello,world/n";
printd(text);
}


gcc -o hello main.c -L./ -lhellod

然后运行hello可以看到输出

print in dynamic way: Hello World!

如果删除库文件,会出现:./hello: error while loading shared libraries: libhellod.so: cannot open shared object file: No such file or directory
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: