假设我现在个动态库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文件
arcrvlibRobin.arobin.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 ..
<wbr style="line-height:25px"></wbr>
分享到:
相关推荐
使用简单的程序展示了C++调用动态库和静态库的方法。 文件结构: exe:笔者部署可运行文件,因开发环境版本不同,可能存在无法直接使用的情况,两个部署文件(copy_ldd.sh及useLib1.sh)可以结合文章分享的(ubuntu下...
VC动态静态相互调用示例,比如静态发布MFC里包含调用DLL,静态库调用动态库
静态库、动态库生成过程,各种调用方法,包括动态调用、静态调用的方法,还有vs2008的工程实例,总之,看了该资料,就可以从原理到实践的彻底弄明白静态库和动态库。
静态库的制作:(inc/lib/src/main.c) gcc -c src/*.c(编译src目录下的.c文件生成.o文件) ar rs libmath.a *.o(生成静态库:libmath.a(命名规则:必须以lib开头,以.a结尾,中间是库名:math)) 静态库的使用: gcc main.c -...
只要是qt在android开发中调用动态库和静态库的例子。
MyTest程序 调用 Dll1动态库,Dll1 同时调用 MyDll2动态库和Mylib1静态库。 最后,MyTest.exe 只需放置Dll1动态库和MyDll2动态库 程序在VS2015上编译的,亲自测试通过。
本程序里面含有三个简单的示例,分别是C++创建动态库,创建静态库,调用动态静态库,代码简单,但是很有用
演示Qt静态链接库与动态链接库的创建与使用。环境:windows xp Qt4, MinGW编译器环境。供备忘和参考。
VS2008静态库和动态库的创建和调用 讲解了vs2008中静态库的创建和使用.动态库的创建和使用. 有详细过程,和一些理解.
一个项目的完成,需要对其进行静态、动态库模板熟悉,从基础做起
本人整理的VC6中怎样调用静态库和动态库,希望可以帮助到初学者
在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库(*.a)与动态库(*.so)的生成...
c++ 创建dll(动态库)、static lib(静态库),以及dll的相互调用 示例vs2022工程 sln项目文件在 c++_dll_staticLib\libtest\MathTestLib 目录下 以前有小错误,更新了错误(2023-05-28)
用GCC编译器制作静态库和动态库的方法简介。
关于静态库和动态库的创建、调用。动态库有:MFC动态库、win动态库等。
关于库的测试代码,使用静态库动态库 解压工具tar
一般静态库、动态库的创建和使用 (非 MFC 动态库) 总结解决方案的学习内容: 1.静态库的创建和使用 2.动态函数库的创建及使用 3.动态库的动态调用和静态调用 4.动态库导入、出全局共享变量 5.动态库导入、出类
新手入门很好用的:在Linux中创建静态库和动态库,例子和错误分析
libyuv动态库与静态库的使用,封装,测试demo.libyuv所处理的数据类型一般都是NV21 YUV420格式。需求端客户要对8位的灰度图像进行放缩处理,同时对外发布版本的时候不能直接告诉客户我们用的是libyuv,所以需要对...
C与C++接口、静态库、动态库的互调。使用build.sh脚本方式编译,直接运行main程序即可。