当前位置: 首页 > news >正文

旅游网站开发设计与实现友情链接交换网站

旅游网站开发设计与实现,友情链接交换网站,怎么把自己做的网站发到网上通过网址来查看,wordpress侧边栏一 静态库 和动态库 对比 静态库的原理#xff1a;假设我们有一个 静态库#xff0c;大小为500M#xff0c;这个静态库实现了一些打牌的逻辑算法#xff0c;提供了一堆API#xff0c;让开发者 可以轻松的实现 54张扑克牌的随机发牌#xff0c;指定发牌等功能。 我们写了…一 静态库 和动态库 对比 静态库的原理假设我们有一个 静态库大小为500M这个静态库实现了一些打牌的逻辑算法提供了一堆API让开发者 可以轻松的实现 54张扑克牌的随机发牌指定发牌等功能。 我们写了一个腾讯的棋牌类游戏在牌类中有斗地主够级升级等游戏很显然每一个单独的游戏都是一个 可执行的 .out文件了。 假设叫做 a.out,b.out,c.out 显然这a.out,. b.out,c.out都会用到静态库中的这些方法。 那么静态库 和 每一个 .out结合的样子 类似下图 也就是说 静态库会被每个.out copy 一份到自己的代码里面。 静态库要求执行效率高但是会牺牲空间。 操作系统的开机加载的一般都是静态库。 目前静态库的应用比较少动态库的场景比较多静态库知道怎么弄如果今后开发中遇到了知道怎么实做就可以了。 静态库在应用程序生成后可以不必再编译节省再编译时间如果其他开发人员要使用您的程序而你又不想给其源码提供静态库是一种选择。 动态库则不会 被copy 动态库会单独的存放一份被大家共享不会被各个 .out文件copy 一份。而是在a.out需要的时候去动态库中找到想要的 api调用一下。 二 如果制作一个静态库 1.使用写好的 .c.h.cpp文件生成.o文件 g -c addfunc.cpp -I ./head -o addfunc.o g -c subfunc.cpp -I ./head -o subfunc.o g -c mulfunc.cpp -I ./head -o mulfunc.o g -c devfunc.cpp -I ./head -o devfunc.o 2.build 出来静态库文件我们这里起名叫做 libdou.a ar rcs libdou.a addfunc.o subfunc.o mulfunc.o devfunc.o 这时候我们就得到了 libdou.a  关于1,2的说明 在build 出来静态库之前是需要生成所有.c 和 .cpp的.o文件的我们这里将.h文件都放在了head头文件里面 我们使用的代码如下 有5个文件一个.h 放在 head文件夹下4个.cpp文件 dou.h #pragma once #include iostream using namespace std; //目前的状况是我们是第三方的库开发者致力于开发一些第三方库卖钱开发了一个加减乘除的算法库 //这个算法很先进使用了AI技术是8个博士后的心血结晶我们不希望使用者知道开发的细节 //因此我们需要提供一个 .h文件告知使用者你要引入的头文件是这个.h文件 //并且提供了一个静态库给 开发者libdou.aint addfunc01(int a, int b); int subfunc02(int a, int b); int mulfunc03(int a, int b); int devfunc04(int a, int b); addfunc.cpp #include dou.hint addfunc01(int a, int b) {return a b; } subfunc.cpp #include dou.hint subfunc02(int a, int b) {return a - b; }mulfunc.cpp#include dou.hint mulfunc03(int a, int b) {return a * b; } devfunc.cpp#include dou.hint devfunc04(int a, int b) {if (b 0) {cout devfunc04 error because dividend 0 endl;return -1;}return a / b; } g -c addfunc.cpp -I ./head -o addfunc.og -c subfunc.cpp -I ./head -o subfunc.og -c mulfunc.cpp -I ./head -o mulfunc.og -c devfunc.cpp -I ./head -o devfunc.oar rcs libdou.a addfunc.o subfunc.o mulfunc.o devfunc.o 这时候我们就得到了 libdou.a  3. 第三方公司如何应用 3.0我们卖给第三方公司的就是一个头文件dou.h和一个libdou.a, 3.1 第三方的有一个 test.cpp,在这个 test.cpp 用到了静态库中的一些方法 需要导入我们的 #include dou.h 并且将dou.h 放在和test.cpp 一行的 head目录下 test.cpp #include iostream #include dou.h using namespace std;int main(){coutab addfunc01(10,5)endl;couta-b subfunc02(10,5)endl;couta*b mulfunc03(10,5)endl;couta/b devfunc04(10,5)endl;return 0; } 3.2 将test.cpp 和 静态库文件 libdou.a 静态编译在一起。生出来一个test.out文件 g test.cpp libdou.a -o test.out -I ./head 3.3执行 ./test.out hunandedehunandede-virtual-machine:~/day02/staticlib$ g test.cpp libdou.a -o test.out -I ./head hunandedehunandede-virtual-machine:~/day02/staticlib$ ./test.out ab 15 a-b 5 a*b 50 a/b 23.4 查看 test.out的大小 我们观察到 最终客户生成的 test.out 占据的大小为 14016但是实际上我们的test.cpp文件只有269这么大。可见确实 将静态库 build 自己里面了。 三 .动态库的制作和使用 1.使用写好的 .c.h.cpp文件生成.o文件 但是这种动态库的.o文件是和静态库的.o文件不一样。因此制作方法也不一样。 动态库制作.o文件的方法 g -c addfunc.cpp -I ./head -o addfunc.o -fPIC 静态库制作.o文件的方法 g -c addfunc.cpp -I ./head -o addfunc.o g -c addfunc.cpp -I ./head -o addfuncdongtai.o -fPIC g -c subfunc.cpp -I ./head -o subfuncdongtai.o -fPIC g -c mulfunc.cpp -I ./head -o mulfuncdongtai.o -fPIC g -c devfunc.cpp -I ./head -o devfuncdongtai.o -fPIC 如下是两者不同原理性的说明能看懂就看看不懂拉倒.记住前面的结论就可以了 静态库中方法的地址是以main为依据一般都是main的地址xxx  例如我们的 addfunc01方法的地址 就是 main的地址100 注意这里100不是一个真实的值是我们猜测的 在编译的第四阶段链接的时候会将main的地址给定一个确定的值因此我们调用addfunc01的时候地址也就确定了 动态库的方法的地址不是以main为依据的只有在调用到 addfunc01dongtai 方法的时候才去找真实的地址因此也叫做动态绑定查看printf函数的反汇编会有 printfplt的字样知道这里就可以了。 2,。使用 g -shared 制作动态库 gcc -shared -o lib库名.so add.o sub.o div.o 使用参数 -shard  -o 重命名  lib库名.so  为我们要制作出来的 动态库文件 g -shared -o libdoudongtai.so addfuncdongtai.o subfuncdongtai.o mulfuncdongtai.o devfuncdongtai.o 3.编译可执行程序时指定所使用的动态库-l 指定库名 -L指定库路径 g test.cpp -o a.out -lmymath -L./lib 注意我们实现的时候并没有将libdoudongtai.so放在 lib目录下而是和test.cpp放在一起了只是将将.h文件放在 head文件夹下。 g test.cpp -o a.out -ldoudongtai -L./ -I./head 4.运行 可执行程序 发生问题 ./a.out ./a.out: error while loading shared libraries: libdoudongtai.so: cannot open shared object file: No such file or directory   5.动态库 运行原理 以及 bug fix 原因动态库想要执行需要两个关键的地方链接器 和 动态链接器 链接器 和 动态链接器没有关系可以理解为 “张三” 和 “张三丰” 的关系。 链接器 工作于编译的 链接阶段工作时需要 -l 和 -L 支持我们已经在前面说明了在哪里 动态链接器工作于程序运行阶段工作时需要提供动态库所在目录位置。 动态库所在目录位置是几个比较固定的位置我们需要将 动态库所在目录 放在这几个固定的位置如下的说明应该是有三个地方 ​ 当执行函数动态链接.so时如果此文件不在缺省目录下‘/lib’ and ‘/usr/lib’.那么就需要指定环境变量LD_LIBRARY_PATH​ 1.动态环境变量存放的地方为 LD_LIBRARY_PATH export 表示导入下面的意思是导入LD_LIBRARY_PATH为当前文件夹。 export LD_LIBRARY_PATH./ 然后执行 ./a.out     结果正常 2. 当我们将当前的 窗口关闭然后重新打开一个窗口的时候cd到当前目录执行 ./a.out 又无法执行了 这是因为 LD_LIBRARY_PATH 环境变量是 进程的概念我们刚才打开的 窗口中执行了 export LD_LIBRARY_PATH./  当这个窗口关闭后设置的也就不生效了。 那么怎么弄呢 既然窗口关闭后LD_LIBRARY_PATH 环境变量的值就会使用默认的那么我们就改动 窗口的配置即可。从前几章的知识我们知道 我们在窗口打的字最终是 shell 解释器在处理内容然后回复给我们shell有很多种而在unbutu中这个shell 实际上 bash。因此我们改动bash的配置文件就OK了。bash的配置文件叫做 .bashrc    打开 .bashrc 添加 export LD_LIBRARY_PATH./ 注意后面的./ 是路径如果我们这么加每次都需要进入到 a.out的目录才能执行a.out 建议 改成绝对路径 打开 .bashrc 添加 export LD_LIBRARY_PATH/home/hunandede/day02/dongtaiku/ 总结 上面写的太多了。整理 5.1 临时生效方法只在当前窗口有用 export 表示导入下面的意思是导入LD_LIBRARY_PATH为当前文件夹。 export LD_LIBRARY_PATH./ 5.2 永久生效的方法配置bash的 配置文件 .bashrc 1.打开终端vim ~/.bashrc 2.在最后一行加上 export LD_LIBRARY_PATH/home/hunandede/day02/dongtailib 保存退出 3 执行  . .bashrc/ 重启终端  (这个好像不行先不管) 或者 source .bashrc  重启终端 或者关闭终端后重新打开 4.执行 ./a.out 6.动态库bug fix2 加入到 ‘/lib’ 或者‘/usr/lib’ 中 当执行函数动态链接.so时如果此文件不在缺省目录下‘/lib’ and ‘/usr/lib’. 才会去找 LD_LIBRARY_PATH 因此我们也可以将 .so文件copy 一份 放在 根目录下的 /lib文件下。 7.动态库 bug fix3配置文件方法-- 修改etc/ld.so.conf 1.修改etc/ld.so.conf sudo vim /etc/ld.so.conf 添加你的共享库路径 2.更新查找共享库的路径 -v 是显示个用户看过程的意思 sudo ldconfig -v 3.测试你的程序可否找到共享库 ldd a.out 8.怎么知道 a.out 文件是否已经有所有的动态库了呢 可以使用 ldd  a.out 查看 ldd 是这个命令它会分析 a.out执行起来需要哪些动态库以及这些动态库执行起来的路径在哪里如果你的动态库缺失或者没有配置则后面为空 如下我们的 a.out是OK的因此查看 hunandedehunandede-virtual-machine:~/day02/dongtailib$ ldd a.outlinux-vdso.so.1 (0x00007ffe28528000)libdoudongtai.so /home/hunandede/day02/dongtailib/libdoudongtai.so (0x00007fb421ae1000)libstdc.so.6 /usr/lib/x86_64-linux-gnu/libstdc.so.6 (0x00007fb42175f000)libc.so.6 /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb421395000)libm.so.6 /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb42108c000)/lib64/ld-linux-x86-64.so.2 (0x00007fb421ce4000)libgcc_s.so.1 /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb420e76000)失败的样子 9.那么这里又有一个问题了当我们给了user  .h文件和  .so文件后还要教客户怎么在 配置吗 实际开发中怎么做的呢
http://www.pierceye.com/news/231717/

相关文章:

  • 站长工具seo综合查询怎么去掉百家号查询排名数据查询
  • 网站怎么做商家定位注册网站不用手机短信验证的网站
  • 郑州医疗网站建设线下推广团队
  • 合肥网站推广 公司哪家好阿里云注销网站
  • 手机网站调用分享网站用户体验存在问题
  • 淘宝网官方网站路飞和女帝做h的网站
  • app网站设计制作360网站 备案
  • 网站建设多久能学会内丘网站建设案例
  • 网站设计要素 优帮云卖东西专业网站网上
  • 做古风人物小图的网站或软件东莞附近的网络推手公司
  • 东莞专业的单位网站建设江苏网站建设定制
  • 宁夏建设工程造价站网站东营网站seo外包
  • 推销网站建设今天重大新闻文字
  • 网站上线过程网站开发系统需求说明书
  • it外包行业江门seo网络推广
  • 深圳石岩建网站判断网站模板版本
  • 梅州市住房和城乡建设局网站东营网站
  • 免费手机端网站模板下载工具windows怎么做网站
  • 新乡网站自然优化本地电脑如何做网站服务器
  • 网站备案是域名备案还是服务器备案辽宁天一建设有限责任公司网站
  • 做网站的软件是什么阿里云官网入口
  • 徐州网站建设服务网络营销方式的优点
  • 建设电影网站点击播放是乱页的建站网站多少钱
  • 网站上传服务器教程交做网贷的网站
  • wordpress网站无法打开wordpress怎么设置跳站外链接
  • 宠物美容网站建设的目的延安网站建设
  • 开发网站如何赚钱网站流量攻击软件
  • 达内网站开发视频教程水利建设专项收入在什么网站上申报
  • php网站后台密码忘记了莆田网站建设推广
  • wordpress typo3seo排名优化哪家好