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

Linux静态和动态链接库使用实例

2015-02-06 16:59 302 查看

Linux静态和动态链接库使用实例

Ø 不同于Win32DLL,Linux标准对象中的所有函数都是直接导出的,都可以被调用程序所访问。也就是说不用头文件即可被导出。

Ø 静态和动态的区别

静态库的代码在编译时已经进入被包含到目标文件了;而动态库的代码要在目标文件运行的时候才会被包含进去,在编译的时候只是对动态库进行一个链接。

1、静态链接库实例

//fun1.h

#include <stdio.h>

void fun1printf();

////////////////////////////////////////////////////////////////////////////////////////////

//fun1.c

#include "fun1.h"

void fun1printf()

{

printf("fun1printf!/n");

}

////////////////////////////////////////////////////////////////////////////////////////////////

//fun2.h

#include <stdio.h>

void fun2printf();

////////////////////////////////////////////////////////////////////////////////////////////////

//fun2.c

#include "fun2.h"

void fun2printf()

{

printf("fun2printf!/n");

}

/////////////////////////////////////////////////////////////////////////////////////////////////////

//staticcall.c

#include <stdio.h>

int main()

{

fun1printf();//不需要导入,直接引用函数

}

///////////////////////////////////////////////////////////////////////////////////////////////////////

//makefile

all:staticlib main

staticlib:fun1.c fun2.c

gcc -c -o fun1.o fun1.c

gcc -c -o fun2.o fun2.c

ar cqs libfun.a fun1.o fun2.o

main:staticcall.c libfun.a

gcc -o staticcall staticcall.c -L ./ -lfun

生成静态链接库的命令是ar cqs。

2、动态链接库实例

所有文件同静态链接库,只是makefile编写不一样。

all:sharedlib sharedcall

sharedlib:fun1.c fun2.c

gcc -fPIC -c fun1.c -o fun1.o

gcc -fPIC -c fun2.c -o fun2.o

gcc -shared fun1.o fun2.o -o libfun.so

sharedcall:

gcc -o sharedcall -L ./ -lfun sharedcall.c

编译生成动态链接库的文件时,必须加上-fPIC,Position Independent Code(地址无关编码)。

在运行程序之前,必须:

Ø export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/ccode/dll/

Ø 在/etc/ld.so.conf中添加/root/ccode/dll/路径
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: