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

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

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

Ø         静态和动态的区别

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

 

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

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

 

在运行程序之前,必须:

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

Ø         /etc/ld.so.conf中添加/root/ccode/dll/路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值