文章目录

  • 静态库打包成程序时已经编译到程序内运行时不要链接,但是动态库需要
  • 为什么静态和动态库,静态链接时完全拷贝,动态库执行时链接拷贝入内存,多程序公用
  • 讲解静态动态区别
  • cmake中添加第三方库和头文件的语法find_pakage set() include_dir
  • cmake中program\project\cmake prog/proj 和 _name,_path 区别大致都一样的我觉得
  • 制作静态库时的几点注意:
  • 编译安装流程configure可以使用cmake(下载后的bin/cmake)
  • 1 源码tar zxvf z对应gz x解压c压缩 v列出文件 f指定解压后文件名usr/local/src
  • 2 配置使用cmake,查找依赖prefix
  • 3编译make -j16
  • 4make install
  • apt安装
  • 1 查找包:apt-cache search soft
  • 2 apt install
  • 3 可执行权限chmod +x moumoumou

静态库打包成程序时已经编译到程序内运行时不要链接,但是动态库需要

移植程序时用静态库全一些,动态还得搜索

为什么静态和动态库,静态链接时完全拷贝,动态库执行时链接拷贝入内存,多程序公用

静态和动态库可以重名,但是不能在一个cmakelist同时add_lib, 如果重名程序优先链接使用动态库
时间效率静态,空间效率动态
共享库变更:一个程序编好后,有时需要做一些修改和优化,如果我们要修改的刚好是库函数的话,在接口不变的前提下,使用共享库的程序只需要将共享库重新编译就可以了,而使用静态库的程序则需要将静态库重新编译好后,将程序再重新编译一便。
静态库变更:先编译静态库,再编译所有的库

所以daoban软件的都是更改动态库,给你个更改了的dll文件让主软件去调用完成daoban使用

linux下共享库和静态库编译的命令mm ar ldd列出可执行程序使用的共享库

# 声明要求的 cmake 最低版本
#单独编译一个模块 libHelloSLAM
cmake_minimum_required( VERSION 2.8 )# 声明一个 cmake 工程
project( HelloSLAM )# 设置编译模式
set( CMAKE_BUILD_TYPE "Debug" )  #"Release"#静态不加 SHARED
# 添加一个共享库 可以先单独先编译为库
#add_library( hello SHARED libHelloSLAM.cpp )
# 添加一个静态库,可以重名但不能同时add,分开生成lib
#add_library( hello libHelloSLAM.cpp)
include_directories(/home/henry/file/00CppRep/slambook-master/ch2/include) #头文件搜索路径
#如果不想一起编译库的源文件,可以直接对单独的库进行链接
link_directories(/home/henry/file/00CppRep/slambook-master/ch2/bb2) #库文件搜索路径
# 添加一个可执行程序,添加了库就不用在编译可执行程序时再加入
add_executable( HelloSLAM useHello.cpp)
#可以链接静态库或者动态库,这里的名称省略lib 和后缀,静态a,动态共享的so,所以如果静态动态重名会自己搜索吗
#target_link_libraries(HelloSLAM hello_shared)
target_link_libraries(HelloSLAM hello)

讲解静态动态区别

https://www.cnblogs.com/hoys/archive/2011/07/25/2116601.html

静态库:
首先将源文件编译成目标文件:gcc –c a.c b.c
生成静态库:ar –rc libstatic.a a.o b.o共享库:
同静态库一样编译成目标文件:gcc –c a.c b.c
生成共享库:gcc –fPIC –shared –o libshared.so a.o b.o

cmake中添加第三方库和头文件的语法find_pakage set() include_dir

https://blog.csdn.net/whatday/article/details/106191363
大型开源库路径添加方式
如果是简单的引入,可以直接通过指令INCLUDE_DIRECTORIES,LINK_DIRECTORIES或者CMAKE_INCLUDE_PATH和CMAKE_LIBRARY_PATH进行设置。但是该方式存在缺点

需要把路径固定,不宜迁移,修改麻烦
如果存在大量的路径的话,需要一次添加所有的路径比较复杂
因此可以通过FIND 进行查找路径,通过FIND_PACKAGE 获得所有的头文件和库文件路径。
比如对于OpenCV,这样的方式将会十分方便。这里介绍几种常用的方式:Find_pakage

#添加OPENCV库
#指定OpenCV版本,代码如下#这里如果没有make install将opencv的库和头文件添加到系统环境变量,需要添加Opencv安装路径才行,其中包含bin/include/lib
set(OpenCV_DIR D:/opencv/build/install)#find_package(OpenCV 3.3 REQUIRED)
#如果不需要指定OpenCV版本,代码如下
find_package(OpenCV REQUIRED)#添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( main main.cpp )# 将库文件链接到可执行程序上
target_link_libraries( main ${OpenCV_LIBS})

cmake中program\project\cmake prog/proj 和 _name,_path 区别大致都一样的我觉得

制作静态库时的几点注意:

1 注意理解:无论是.a静态库还.framework静态库,我们需要的都是二进制文件+.h+其它资源文件的形式,不同的是,.a本身就是二进制文件,需要我们自己配上.h和其它文件才能使用,而.framework本身已经包含了.h和其它文件,可以直接使用。

2 图片资源的处理:两种静态库,一般都是把图片文件单独的放在一个.bundle文件中,一般.bundle的名字和.a或.framework的名字相同。.bundle文件很好弄,新建一个文件夹,把它改名为.bundle就可以了,右键,显示包内容可以向其中添加图片资源。

3 category是我们实际开发项目中经常用到的,把category打成静态库是没有问题的,但是在用这个静态库的工程中,调用category中的方法时会有找不到该方法的运行时错误(selector not recognized),解决办法是:在使用静态库的工程中配置other linker flags的值为-ObjC。

4 如果一个静态库很复杂,需要暴露的.h比较多的话,就可以在静态库的内部创建一个.h文件(一般这个.h文件的名字和静态库的名字相同),然后把所有需要暴露出来的.h文件都集中放在这个.h文件中,而那些原本需要暴露的.h都不需要再暴露了,只需要把.h暴露出来就可以了。

编译安装流程configure可以使用cmake(下载后的bin/cmake)

1 源码tar zxvf z对应gz x解压c压缩 v列出文件 f指定解压后文件名usr/local/src

源码下载

2 配置使用cmake,查找依赖prefix

cmakelists.txt中 可以set(CMAKE_PREFIX_PATH 路径)
(1)/usr/local/apache2目录是随意指定的一个安装目录,也可以安装到其它目录下;

​ (2)使用./configure配置时,需要将工作目录切换到软件源码所在的目录;

​ (3)使用源码目录中的configure脚本,由于configure是软件程序而不是系统命令,所以执行时,需要指明路径,由于目前是在httpd-2-2.15,可以使用相对路径 ./configure,.(点)的意思是指当前目录httpd-2-2.15目录;

​ (4)–prefix选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share,比较凌乱;如果使用–prefix选项可以将安装文件放到/usr/local/apache2目录中,有利于查找、卸载软件或移植软件,当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净,移植软件只需拷贝整个目录到另外一个机器即可;

3编译make -j16

4make install

这一步将bin文件拷贝,include文件拷贝,lib文件拷贝,share文件拷贝

apt安装

1 查找包:apt-cache search soft

2 apt install

3 可执行权限chmod +x moumoumou

apt-get install packagename——安装一个新软件包(参见下文的aptitude)
apt-get remove packagename——卸载一个已安装的软件包(保留配置文件)
apt-get --purge remove packagename——卸载一个已安装的软件包(删除配置文件)
dpkg --force-all --purge packagename ——有些软件很难卸载,而且还阻止了别的软件的应用,就可以用这个,不过有点冒险。
apt-get autoremove——因为apt会把已装或已卸的软件都备份在硬盘上,所以如果需要空间的话,可以让这个命令来删除你已经删掉的软件。
apt-get autoclean——定期运行这个命令来清除那些已经卸载的软件包的.deb文件。通过这种方式,可以释放大量的磁盘空间。如果需求十分迫切,可以使用apt-get clean以释放更多空间。这个命令会将已安装软件包裹的.deb文件一并删除。
apt-get clean——这个命令会把安装的软件的备份也删除,不过这样不会影响软件的使用的。
apt-get upgrade——更新所有已安装的软件包
apt-get dist-upgrade——将系统升级到新版本
apt-cache search string——在软件包列表中搜索字符串
apt-cache showpkg pkgs——显示软件包信息。
apt-cache stats——查看库里有多少软件
apt-cache dumpavail——打印可用软件包列表。
apt-cache show pkgs——显示软件包记录,类似于dpkg –print-avail。
apt-cache pkgnames——打印软件包列表中所有软件包的名称
(需要定期运行这一命令以确保您的软件包列表是最新的)
简单的说: dpkg只能安装已经下载到本地机器上的deb包. apt-get能在线下载并安装deb包,能更新系统,
且还能自动处理包与包之间的依赖问题,这个是dpkg工具所不具备的。

linux安装软件apt或者编译安装说明相关推荐

  1. Linux 之旅 21:编译安装软件

    Linux 之旅 21:编译安装软件 图源:pexcel 开源软件的安装与升级 可执行文件 通常,源代码只有被编译成二进制的可执行文件后才能在操作系统上被用户直接运行,比如: [icexmoon@xy ...

  2. Linux查看已经安装软件的版本,安装软件的路径,以及dpkg、aptitude、apt-get、apt工具的使用

    Linux查看已经安装软件的版本,安装软件的路径,以及dpkg.aptitude.apt-get.apt工具的使用: 1 dpkg的使用 2 Linux查看已经安装的软件以及版本 2.1 Linux查 ...

  3. Linux 的软件管理及配置 - 安装、卸载、升级、依赖

    1. 对比:Windows 和 Linux 上软件的安装与卸载 大部分 Linux 使用者都是从 Windows 转过来的,先对这俩做个对比,有助理解. 就像在 Windows 下,很多软件也有安装版 ...

  4. 文件系统层次结构标准和Linux上下载源代码配置编译安装

    一.文件系统层次结构标准 FHS_3.0 标准文档 /bin 存储一些二进制可执行命令文件, /usr/bin 也存放了一些基于用户的命令文件. /sbin 存储了很多系统命令, /usr/sbin ...

  5. android 代码发adb,Android预安装软件adb命令编译源码

    Android预安装软件&adb命令&编译源码 发布时间:2020-06-02 17:28:41 来源:51CTO 阅读:895 作者:年少的风 1.预安装软件: 将eclipse下的 ...

  6. linux安装源文件出现错误,编译安装源码时出现错误的解决方法

    由于软件更新速度比较快,所以我们经常需要自己动手去编译安装一个软件,但是编译安装时难免不出现错误,像LAMP,LNMP在好多平台我都是手动编译的,也出现过不少错误,以下总结编译安装出现错误时的解决方法 ...

  7. yum安装 vs 源码编译安装

    一直坚持yum安装,原则如下: 1. 公共约定优先,方便运维 2. 方便编写自动化部署脚本 3. 应用升级方便 一直以为源码编译安装可能会有效率上的优势,结局却比较另人忧伤. 根做运维的朋友聊天,谈到 ...

  8. 安装软件以及kickstart自动安装虚拟机

    #########安装软件########### 使用yum源安装dhcp.在教室的电脑先删除本来有的dhcp,按照老师截图安装dhcp,这下自己的电脑也就可以安装软件了.因为再家里没有dhcp,所以 ...

  9. ubuntu14.04 nginx php编译安装,Ubuntu 14.04 编译安装 Nginx

    在Ubuntu 14.04下编译安装 Nginx过程笔记. 下载源码包 nginx 地址: http://nginx.org/en/download.html 编译前先安装两个包: 直接编译安装会碰到 ...

最新文章

  1. BeanShell增强的FOR循环
  2. 《DSP using MATLAB》示例Example7.22
  3. 新元素之section,article,aside
  4. vb.net 文本框为空提示,一键清空文本框所有内容
  5. TCP协议面试灵魂10问 | 强势整理
  6. 对if...else if...的理解
  7. Windows Phone Developer Tools Offline Documentation 脱机文档下载
  8. bootstrap popover弹框内容换行
  9. MATLAB修改代码字体
  10. VMware如何开机自动启动虚拟机也启动
  11. 图信号处理之图拉普拉斯矩阵的含义
  12. ps第二次安装出错解决办法
  13. 华为IBMC管理口提示:当前无可操作的RAID控制器 以及 在远程控制台做raid的方法
  14. 胆囊炎以及胆结石的朋友注意了
  15. 如何确定自己测试结束?
  16. centos7.1中安装calamari
  17. SWIFT之殇——针对越南先锋银行的黑客攻击技术初探
  18. asp.net2.0学习指导 菜鸟到中级程序员的飞跃
  19. 一台计算机两人共享使用,双人共享一台电脑主机 两个人同时使用一台电脑主机...
  20. 人工智能的应用带来便利,也引发数据滥用、隐私侵犯的担忧

热门文章

  1. 通过炒股实现财务自由的人,都做对了什么?
  2. Python实现TOPSIS分析法(优劣解距离法)
  3. J2ME资源:各厂商SDK和模拟器下载地址
  4. phpinfo函数的使用
  5. python程序sum函数的用法_python 运行sum函数的使用
  6. Spring中的IOC介绍
  7. 关于计算机网络实验心得体会以及两种错误情况
  8. 使用javascript抓取网站数据
  9. 加拿大FBA海运详细说明
  10. 【全国大学生电子设计大赛】2021-04-26