linux安装软件apt或者编译安装说明

文章目录

  • 静态库打包成程序时已经编译到程序内运行时不要链接,但是动态库需要
  • 为什么静态和动态库,静态链接时完全拷贝,动态库执行时链接拷贝入内存,多程序公用
  • 讲解静态动态区别
  • 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)

linux安装软件apt或者编译安装说明_第1张图片

linux安装软件apt或者编译安装说明_第2张图片

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,ubuntu,运维)