静态库调用动态库

转自:http://blog.csdn.net/hudashi/article/details/7060777

 

假设我现在个动态库A,它有个函数叫A_Function(),同时我又有个静态库B,静态库B有个函数B_Function(),该函数又使用了动态库A的A_Function()函数。
那么此时它是动态调用呢?还是静态库B在进行编译时会把动态库A的A_Function()函数的相关代码拷贝过来,运行时进行静态调用呢?
经过写程序测试,终于得出结论:是动态调用。即静态库对动态库的调用仍然是动态调用。也就是说如果我写了个程序C,它调用静态库B的函数B_Function()的话,我们不仅在编译程序C需要动态库A,而且运行程序C时仍然需要动态库A
测试程序
测试程序共有3个目录src,src2,src3

src目录下有两个文件robinDynamic.h,robinDynamic.c.

它们用于生产动态库,其源码如下

robinDynamic.h文件

#ifndef robin_dynamic_H
#define robin_dynamic_H
#include <stdio.h>
void sayHelloWorld();
#endif
robinDynamic.c文件
#include "robinDynamic.h"
void sayHelloWorld()
{
printf("this is my first helloworld \n");
}
src2目录下也有两个文件robin.h,robin.c,它们用于生成静态库,其源码如下
robin.h文件
#ifndef _robin_H
#define _robin_H
void sayHello();
#endif
robin.c文件
#include "../src/robinDynamic.h"
#include "robin.h"
void sayHello()
{
sayHelloWorld();
}
src3目录下只有一个文件
#include "../src2/robin.h"
int main()
{
sayHello();
return 0;
}
编译脚本
cd src
echo 编译动态库RobinDynamic
gcc robinDynamic.c  -fPIC  -shared  -o libRobinDynamic.so
cd ../src2
cp ../src/libRobinDynamic.so .
echo 编译静态库Robin
gcc robin.c  -c  -L.  -lRobinDynamic  -o robin.o
echo 把动态库RobinDynamic和静态库Robin打包进.a文件
ar  crv   libRobin.a  robin.o
cd ../src3
cp ../src2/libRobin.a .
cp ../src/libRobinDynamic.so .
echo 编译test程序
gcc test.c  -L.   -lRobin   -lRobinDynamic  -o test.exe
rm libRobin.a
rm libRobinDynamic.so
echo 在没动态库RobinDynamic的下情况,运行test程序
./test.exe
cp ../src/libRobinDynamic.so .
echo 拷贝动态库RobinDynamic到当前目录下后,运行test程序
./test.exe
cd ..
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值