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

说旅游网页设计作业郑州网站制作选择乐云seo

说旅游网页设计作业,郑州网站制作选择乐云seo,怎么做网站导航外链,教学成果奖网站建设Linux 前言对比创建静态库动态库 前言 程序库,对于程序原来说是非常重要的。但不少人对其不太了解,接下来一起学习其中的奥秘吧! 简单来说,程序库可以分为静态库和共享库。它们包含了数据和执行代码的文件。其不能单独执行&#…

Linux

  • 前言
  • 对比
  • 创建静态库
  • 动态库

前言

程序库,对于程序原来说是非常重要的。但不少人对其不太了解,接下来一起学习其中的奥秘吧!
简单来说,程序库可以分为静态库和共享库。它们包含了数据和执行代码的文件。其不能单独执行,可以作为其他执行程序的一部分来完成某些功能。库的存在,可以使得程序模块化,可以加快程序的再编译,可以实现代码的重用,可以使得程序便于升级

对比

静态库是指在程序运行前就已经加入到执行代码中,成为执行程序的一部分。程序会把静态库加载到自己的内存当中,比如在Linux环境下,编译产生多个a.out,那么相当于每个a.out里面都会存有静态库的内存,从而大大削减了程序的运行时间,但是增加了空间大小,另外静态库更新比较麻烦,一般不做推荐

所以静态库适用于对空间要求比较低,对时间要求比较高的核心程序中

而相比共享库(动态库),是在执行程序启动时加载到执行程序中。它是这几个a.out用到库的时候一起去调用库文件,被多个执行程序共享使用。因此时间上效率就会下降,虽然节省了空间,但是耗费了时间。另外动态库是独立的,便于维护更新

所以动态库一般用在对时间要求低的,对空间要求高的设备上。

创建静态库

首先创建几个.cpp文件
创建两个cpp文件

[bsk@localhost linux_system]$ touch sum.cpp
[bsk@localhost linux_system]$ ls
sum.cpp
[bsk@localhost linux_system]$ vi sum.cpp 
[bsk@localhost linux_system]$ ls
sum.cpp
bsk@localhost linux_system]$ touch div1.cpp
[bsk@localhost linux_system]$ cd d
bash: cd: d: No such file or directory
[bsk@localhost linux_system]$ vi div1.cpp 

两个文件内容如下:

  2 int sum(int a, int b)                                                                                                                                                                                          3 {4 return a+b;5 }
  2 int div1(int a, int b)                                                                                                                                                                                          3 {4 return a/b;5 }

然后将.cpp文件生成 .o文件

[bsk@localhost linux_system]$ g++ -c sum.cpp -o sum.o
[bsk@localhost linux_system]$ ls
div1.cpp  sum.cpp  sum.o
[bsk@localhost linux_system]$ g++ -c div1.cpp -o div.o

再使用ar工具制作静态库

[bsk@localhost linux_system]$ ar rcs libmymath.a sum.o div.o
[bsk@localhost linux_system]$ ls
div1.cpp  div.o  libmymath.a  sum.cpp  sum.o

再编写主函数test.cpp

  1 #include<iostream>2 using namespace std;3 int div1(int a,int b);4 int sum(int a, int b); 5 int main()6 {7 int a = 10;8 int b = 2;9 cout<<"a+b= " <<sum(a,b)<<endl;10 cout<<"a/b= " <<div1(a,b)<<endl;11 return 0;12 }

编译静态库到可执行文件中

[bsk@localhost linux_system]$ g++  libmymath.a test.cpp  -o a.out

即可运行a.out

[bsk@localhost linux_system]$ ls
a.out  div1.cpp  div.o  libmymath.a  sum.cpp  sum.o  test.cpp
[bsk@localhost linux_system]$ ./a.out 
a+b= 12
a/b= 5

其实上面这种方法有一点漏洞,就是头文件没有单独写出来

` #ifndef _MYMATH_H_                                                                 2 #define _MAMATH_H_3 int div1(int a,int b);4 int sum(int a, int b);5  6 #endif
~                 `

把头文件单独写出来,再在test.cpp中引用头文件即可。

可以再创建 lib 和inc 两个目录,然后把他们分别放进去

[bsk@localhost linux_system]$ mkdir inc
[bsk@localhost linux_system]$ mkdir lib
[bsk@localhost linux_system]$ mv *.h inc/
[bsk@localhost linux_system]$ mv *.a lib

即可运行

[bsk@localhost linux_system]$ g++ test.cpp  ./lib/libmymath.a  -o a.outy -I ./inc/
[bsk@localhost linux_system]$ ls
a.out  a.outy  div1.cpp  div.o  inc  lib  sum.cpp  sum.o  test.cpp  -Wall
[bsk@localhost linux_system]$ ./a.outy
a+b= 12
a/b= 5

动态库

将.cpp文件生成 .o文件(要生成与位置无关的代码 -fPIC)

[bsk@localhost sourse]$ g++ -c sum.cpp  -o sum.o -fPIC
[bsk@localhost sourse]$ g++ -c div1.cpp  -o div1.o -fPIC
[bsk@localhost sourse]$ ls
div1.cpp  div1.o  sum.cpp  sum.o
[bsk@localhost sourse]$ 

使用g++ -shared 制作动态库
g++ -shared -o lib库名.so sum.o div1.o

[bsk@localhost sourse]$ g++ -shared -o libmymath.so sum.o div1.o
[bsk@localhost sourse]$ ls
div1.cpp  div1.o  libmymath.so  sum.cpp  sum.o
[bsk@localhost sourse]$ 

编译可执行文件时,指定所使用的动态库
-l 指定库名 -L 指定库路径

[bsk@localhost dynamiclib]$ g++ test.cpp  -o a.out -l mymath -L ./lib -I./inc
[bsk@localhost dynamiclib]$ ls
a.out  inc  lib  sourse  test.cpp
[bsk@localhost dynamiclib]$ ./a.out 
./a.out: error while loading shared libraries: libmymath.so: cannot open shared object file: No such file or directory
[bsk@localhost dynamiclib]$ 

如上所示竟然出错了,为什么呢?
首先先来了解一下链接器和动态链接器,
链接器: 工作于链接阶段,工作时需要 -l 和 -L
动态链接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置。
所以这个错误就是动态链接库因为找不到库文件,从而报错。
那我们应该如何去解决呢?

  1. 方法一:通过环境变量(临时生效)

方法也很简单,就是修改一下环境变量·
即LD_LIBRARY_PATH = 动态库路径。

[bsk@localhost dynamiclib]$ export LD_LIBRARY_PATH=./lib
[bsk@localhost dynamiclib]$ ./a.out 
a+b= 12
a/b= 5

export的意思是让环境变量设定的值生效。

但是当我们关闭终端后,再重新打开一个终端(新进程),再运行的话,就会又报错,因为·我们设置的环境变量只能在当前进程中生效,所以要想它永久生效的话,就要修改配置文件了。

  1. 方法二:永久生效,写入终端配置文件(建议使用绝对路径)
[bsk@localhost ~]$ vi ~/.bashrc //修改配置文件
//进入后写入 export LD_LIBRARY_PATH=./lib
[bsk@localhost ~]$ . .bashrc 
//重新·运行一下

即可永久生效


[bsk@localhost dynamiclib]$ ./a.out 
a+b= 12
a/b= 5

但是还有一点缺点,就是当我们的/lib是相对命令,如果我们的文件相对于这个lib的路径发生改变了,所以就会又报错。所以一般我们就要使用绝对路径。
摒弃以上做法:

  1. 方法三:拷贝法(不推荐)

我们还可以把libmymath.os文件(自定义动态库)拷贝到系统根目录lib下(标准c库所在目录位置)
即可生效
但是此种方法也有一个缺点,就是它修改的系统级的目录,在系统中添加了自己的文件,不可靠,所以也不推荐使用

  1. 方法四:配置文件法

其实,我们还可以通过修改配置文件法:
首先: sudo vi /etc/ld.so.conf
然后写入 动态库的绝对路径,保存退出。
再重新运行,使配置文件生效
sudo ldconfig -v
此后再./a.out就可以永久成功啦

libmymath.so
[bsk@localhost lib]$ pwd
/home/bsk/test1/linux_system/dynamiclib/lib
[bsk@localhost lib]$ vi /etc/ld.so.conf[bsk@localhost lib]$ sudo vi /etc/ld.so.conf
[sudo] password for bsk: 
[bsk@localhost lib]$ sudo ldconfig -v
.......[bsk@localhost dynamiclib]$ ./a.out 
a+b= 12
a/b= 5
http://www.yidumall.com/news/56860.html

相关文章:

  • 网站会员系统怎么做模版seo常用工具有哪些
  • web页面显示wordpress网站seo优化发布高质量外链
  • wordpress 瀑布流加载北京网站seo服务
  • 长沙网站建设哪家公司好在线咨询 1 网站宣传
  • 山东城市建设厅网站百度推广一个月费用
  • asp网站建设与设计百度自媒体平台
  • 网站建设编辑工作总结营销推广方案范文
  • 医院网站开发违法吗网络软营销
  • 做系统后之前网站怎么找回淘宝产品关键词排名查询
  • 旧电脑做网站服务器seo网络优化培训
  • 学做淘宝店的网站百度seo文章
  • 球赛投注网站开发指数基金
  • 优秀的网站设计案例百度知识营销
  • 菏泽定制网站建设推广网店运营工资一般多少
  • n加1网站建设百度在线使用
  • 解析网站接口怎么做营销策划有限公司经营范围
  • 有限公司简介互联网优化是什么意思
  • 做网站买个域名多少钱免费推广产品平台有哪些
  • 网站建设 要学多久郑州seo学校
  • 保定网站报价百度搜索关键词
  • 做网站包括备案吗人民政府网站
  • 网站建设kaicz设计师网站
  • 微信怎么开自己的公众号武汉seo管理
  • 网站的站内结构锚文本是如何做的百度网盘链接
  • 大连网站流量优化定制搜索引擎营销的案例
  • php做心理测试网站seo课程多少钱
  • 怎么让别人访问自己做的网站引流软件有哪些
  • 做任务在那个网站靠谱廊坊seo整站优化
  • 个人博客网站源码百度手机点击排名工具
  • 网站的类别搜狗收录提交入口