范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

静态库和动态库(Windows版)

  4 Windows创建和使用静态库
  笔者这里使用的是VS2015,当然也可以使用其他工具。4.1生成静态库
  1.首先打开VS,先新建一个项目,选择win32控制台应用程序,当然选择win32项目也可以。
  2.接下来选择"下一步"进入应用程序设置,这里选择静态库并去掉预编译头,当然也可以在创建项目后去掉也是可以的。最后点击"完成"即可创建项目。
  3.创建头文件(.h)以及源文件(.cpp)
  StaticLib.h#ifndef _STATIC_LIB_H_ #define _STATIC_LIB_H_ #include  namespace StaticLib {     void print_hello(); //Test function } #endif
  StaticLib.cpp#include "StaticLib.h" void StaticLib::print_hello() {     std::cout << "Hello world!" << std::endl; }
  4.生成解决方案,我这里选择的是release。
  5.编译成功后就可以在工程目录下看到静态库。
  4.2使用静态库
  1.还是创建个普通的win32控制台程序。
  在应用程序设置界面选择"控制台应用程序",还是不勾选"预编译头"。
  2.我们把上面创建lib时的头文件包含到新创建的控制台程序中,同时将lib文件复制到工程目录下。当然也可在编写测试程序时使用库所在的路径。
  3.然后在测试源文件中输入以下代码:#include "StaticLib.h" #pragma comment(lib,"WindowStaticLib.lib") int main() {     StaticLib::print_hello();      system("pause");     return 0; }
  #pragma comment(lib,"xxx.lib")表示链接xxx.lib这个库。
  4.最后生成并执行工程。
  值得注意的是,生成应用程序的环境应与创建库的环境一样。
  当然还有一种调用方式。
  首先在测试工程目录下新建如下文件夹,将库和头文件分别拷贝到相应的文件夹中。
  然后在配置下工程属性:
  另外还需要属性页面中选择链接器->输入->附加依赖项中添加新生成的库。
  同样也能得到正确结果。
  另外,调用的代码更改如下:#include "StaticLib.h" int main() {     StaticLib::print_hello();      system("pause");     return 0; }
  当然啦,也可以不配置链接器中的库。还是保留一下语句:#pragma comment(lib,"WindowStaticLib.lib")
  以上两种方式本质都是一样的,只是通过不同的方式来配置罢了。5 Windows创建和使用动态库5.1生成动态库
  1.首先创建一个动态库工程。
  和静态库一样,取消去掉预编译头,这里选择DLL。
  2.创建头文件(.h)以及源文件(.cpp)
  DynamicLib.h#ifndef _DYNAMIC_LIB_H_ #define _DYNAMIC_LIB_H_ #include  #define DLL_EXPORTS #ifdef DLL_EXPORTS #define DLL_API __declspec(dllexport) #else #define DLL_API __declspec(dllimport) #endif extern "C" { namespace DynamicLib { DLL_API void print_hello(); } } #endif // _DYNAMIC_LIB_H_
  DynamicLib.cpp#include "DynamicLib.h" DLL_API void DynamicLib::print_hello() {    std::cout << "Hello world!" << std::endl; }
  【注1】__declspec(dllexport)是导出符号,也就是定义需要导出函数的dll中给导出函数的函数声明前面加上导出符号,表示该方法可以导出给其他DLL或者exe使用。
  【注2】C++的代码加extern "C",是为了保证编译时生成的函数名不变,这样动态调用dll时才能。
  3.选择release生成解决方案,最后生成的库如下图所示:
  好了,动态库就创建好了。5.2使用动态库
  1.还是创建个普通的win32控制台程序。
  2.将前面创建的动态库的头文件(.h),dll文件复制到与测试项目中。
  3.编写测试
  有两种方法调用动态库,一种隐式链接,一种显示链接。
  先说第一种隐式调用。隐式调用需要.h文件,.dll文件,.lib文件。
  在源文件加入如下代码:#include "DynamicLib.h" #pragma comment(lib,"WindowDynamicLib.lib") int main() {     DynamicLib::print_hello();     system("pause");     return 0; }
  然后编译运行。
  接下来在看看显式调用。显式调用需要.dll文件,.lib文件。#include  #include   typedef int(*dllfun)(void);//定义指向dll中函数的函数指针  int main() {     HINSTANCE hlib = LoadLibrary(L"WindowDynamicLib.dll");      if (!hlib)     {         std::cout << "load dll error ";         return -1;     }     dllfun fun = (dllfun)GetProcAddress(hlib, "print_hello");     if (!fun)     {         std::cout << "load fun error ";         return -1;     }      fun(); //print_hello()      FreeLibrary(hlib);      system("pause");      return 0; }
  结果和隐式调用一致。
  显式链接需要.dll, 需要事先知道导出函数的签名,不需要.lib和.h文件
  使用显式加载的好处:通过显式加载动态库的方式可以根据需要加载相应的函数,随时可以卸载,通过判断句柄的方式,不会因为找不到dll导致程序无法启动。如果程序需要访问十多个dll,采用动态加载的方式可以减少程序的启动时间,减小程序占用的内存。6静态库和动态库总结
  静态库:编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。
  静态库的代码在编译时链接到应用程序中,因此编译时库文件必须存在并且需要通过"-L"参数传递给编译器,应用程序在开始执行时,库函数代码将随程序一 起调入进程内存段直到进程结束,其执行过程不需要原静态库存在。
  动态库:动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。相当于静态库,不同的应用程序可以使用同一份动态库,因此可以节省内存。另外,而且动态库还可被其他语言调用,诸如Python。
  总之,静态库和动态库的载入时刻不同,静态库是编译时用到的,动态库是运行时用到的。以Windows为例,如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。
  Linux版本如下:
  静态库和动态库(Linux版)

在瑞士旅游,预算1000欧元,能买啥牌子手表?1000欧元的预算的话,国内价位大概在万元以下,下面推荐几款瑞士品牌的手表,希望能帮助到你雪铁纳Certina动能系列C032。407。11。051。02机械男表万表价4,836。请问一级建造师证书与造价工程师证书两者之间考哪个比较好?谢谢邀请!造价和一建比较1价值造价师主要放在审价公司,注册造价工程师价格目前为3万多一年(仅供参考)。建造师多放在施工单位,比注册造价师高(某些专业会低点),当然了二级比一级价格要双腿沉重,小腿肚胀是怎么回事?双腿沉重小腿肚胀,与肝胆和脾胃有关系,因为肝藏血主四肢的筋脉,脾统血主四肢的肌肉,过于劳累走路太多登山和感受风寒风湿,以及肝胆脾胃的疾病都会有这种情况,主要与气血消耗太多,造成血不月薪6000在上海是什么水平?这个问题,怎么说呢,见仁见智。我在上海多年了,复旦本硕毕业,n收入几十万吧,在上海也接触到了各阶层的人,觉得上海是个很包容的城市,公平,机会多,上海平均工资应该在60006500区网约出租车会不会消失?网约出租车会不会消失,答案是肯定的,不会消失。其实这个问题的名词用错了,应该是无证网约车会消失。网约,只是一种手段,而不是一个行业。只有车证,人证齐了才能称为网约出租车。当巡游出租想买一个2000左右性能好闪充快的手机,有没有推荐?上个月刚买了一款手机,就是iQOOneo5,不到一个月吧,是花了2600元在实体店买的(因为是刚上市没多久,跟店员讲价时店员可能不太清楚,说可以抹个零头,后来店长来了说新机不讲价的济宁到西藏自驾游,四个人,一台比亚迪燃油唐,来回费用大概多少?走什么线比较好?不知道你车的油耗水平,按照官网的7个油描述,实际应该在8个左右。路线呢建议川进青出,济宁到成都全程高速1500km左右,过路费加油耗大概1200块,再加上一部分的餐饮饮料等1500冬季农用车难启动怎么办?1启动操作要正确无论冬夏,启动前都要摇转曲轴20圈左右,待机油达到轴瓦等处后再行启动,既降低阻力又减少磨损对久置不用的保养维修润滑系的新购入或大修后的农用车,启动前应摇曲轴1002还记得当年的偷笑门吗,你是怎么看待郭士强的?当年的偷笑门终结了少帅郭士强的国家队执教生涯,这也让他在以后几乎失去了再次成为国家队主教练的可能性。当年的偷笑门确实是把郭士强坑了,具体什么原因我们不清楚,只能分析一下了。著名的偷如何炒米粉,炒面,炒饭才好吃?如何炒米粉炒面炒饭才好吃,其实想要炒米粉炒面炒饭好吃,首先米粉面条米饭的选择很重要,其次就是配菜调料,炒制时候的顺序,最后就是火候了,这样掌握了这些,做出来的炒米粉炒面炒饭绝对好吃北方人不仅冬至吃饺子,好像逢节日也吃饺子,是这样的吗?是的,北方人吃饺子是最爱。过节吃,不过节也吃。过年几乎天天吃饺子。年三十晚上的团圆饺子是必须吃的。初一早晨起来吃饺子,初二送神吃饺子。几乎天天吃饺子。我家平时聚餐几乎都是吃饺子。我
这才是腐竹最好的做法,分享一招,出锅麻辣鲜香,又酥又脆妈妈说腐竹不要直接炒着吃了,有腐竹的一定要学会这样做,香辣脆口香酥过瘾,越辣越想吃,下面来看看详细的做法。辣子小腐竹原料腐竹鸡蛋玉米淀粉大葱香菜辣椒调料食用盐麻椒生抽,白糖火锅底料虚不受补怎么办?不如试试这道汤,健脾益气开胃提神今日推荐鸡枞菌响螺鸡汤材料鸡枞菌150克,响螺干34片,鸡半只,生姜数片,食盐适量。做法(1)用毛刷把鸡枞洗干净,并用手撕成小条响螺干用清水浸泡,切条。(2)鸡肉洗干净切块焯水,加相约三亚来,心醉芒果香大家好啊,最近去了海南三亚旅游!今天我来为大家分享我的攻略,希望对大家有所帮助哦!首先,我要提醒大家,如果打算去三亚旅游,一定要提前准备好防晒,因为三亚这里的阳光真的是非常强烈,而江西南昌放飞风筝骑行乡间户外运动节启幕来源人民网江西频道骑手们自由骑行,纵享田园风光。万友平摄骑手们自由骑行,纵享田园风光。万友平摄人们在蓝天下放飞风筝。万友平摄人们在蓝天下放飞风筝。万友平摄人民网南昌3月12日电(时适合中老年人吃的6种早餐,白米粥未上榜,鸡蛋排第5,别吃错了!睡眠质量对于健康至关重要,而早餐则是保证良好睡眠的关键。尤其对于中老年人,早餐的作用更为重要。但是对于一些上了岁数的中老年人来说,早上会为了省事,会熬一锅白米粥来喝,但有些食物的确鲜嫩好吃的白菜鸡蛋饼,15分钟搞定快手早餐,教你做完美蛋饼哦!胖友们,你们减脂的时候都吃什么早餐啊?最近这个全麦面包脱脂牛奶水煮蛋的套餐,我是真的吃腻了,特别想吃点儿中式早餐,热热乎乎香喷喷的那种,你们懂的哈哈。所以呢,今天就开个荤,吃个白菜亲子搭档,在动手操作中助力儿童健康成长儿童和青少年时期是孩子身心发育的关键时期,如何在这一阶段培养孩子良好的学习习惯和动手能力?3月11日,一场亲子搭档制作飞机模型的儿童青少年心理健康服务活动,在四平路街道阜新路社区睦烧烤圈高居外卖榜第3名烤牛肉串撒料腌料配方!烤牛肉串味道鲜美,肉质鲜嫩,加上酱料的调味,更加美味。据美团信息。烤牛肉串高居烧烤外卖菜品第三名。小编我喜欢吃烤牛肉,要做好烤牛肉,做之前,先要熟悉牛肉的各部位哦!牛身上不同部位的苏格兰美食介绍美食是人们旅行时必不可少的一个关注点,今天就来给大家盘点一些苏格兰传统美食吧。1。羊肉杂碎布丁HaggisHaggis是一道特别传统的苏格兰菜,被称为苏格兰的国菜。它主要是羊杂碎,南京这些奇葩地名,超值得去打卡!一直都想写这个选题来着!它的灵感,源自我前两年在新街口街头的一次随意游逛。我清晰地记得那是一个晴朗的下午,我正走在新街口金鹰国际购物中心旁的一条小路上,无意间瞥了一眼竖在路边的路牌品味人生最为依恋的火车站中国火车站要5554个,朋友,您最依恋的一座。北京西站。南广场。张光忠拍照。笔者的喜欢火车,那是人生最依恋的交通工具。坐火车,必有火车站。我人生最依恋的火车上有四座。最早是汀泗桥火