linux打包动态库命令 linux 动态库编译

Linux 可执行程序 配置文件 动态库 怎么打包成一个软件tar? 或者参考debain,redhat 他们的包管理软件.(复杂一些).
无非就是将各个文件放到指定的地方罢了.
tar --exclude=".svn" --exclude=".git" \
-hczf dist.tar.gz -C $(DIST_DIR) . \
--numeric-owner --owner=0 --group=0
在target上运行以下指令以解压包:
gzip -dc dist.tar.gz
tar -xvf - -C /
你试下可以不 , 如果你想学习更多的linux的知识的话你可以去看下希望对你有帮助啊
linux一个应用多个版本动态库命令Linux 系统,也同样面临和Window一样linux打包动态库命令的问题,如何控制动态库的多个版本问题 。Window之前没有处理好,为此专门有个名词来形容这个问题 “Dll hell”,其严重影响软件的升级和维护 。Dll hell 是指windows 上动态库新版本覆盖旧版本,但是却不兼容老版本 。常常发生在程序升级之后,动态库更新,原有程序运行不起来;或者装新软件 , 但是已有的软件运行不起来 。同样Linux操作系统,也有同样的问题,那么它是怎么解决的呢?
Linux 为解决这个问题,引入了一套机制,如果遵守这个机制来做,就可以避免这个问题 。但是这只事一个约定,不是强制的 。但是建议遵守这个约定 , 否则同样也会出现 Linux 版的Dll hell 问题 。下面来介绍一个这个机制 。这个机制是通过文件名,来控制dll (shared library) 的版本 。
Linux 上的Dll ,叫shared library,其有三个名字 , 分别有不同的目的 。
第一个是共享库本身的文件名(real name) , 其通常包含版本号,常常是是这样linux打包动态库命令: libmath.so.1.1.1234。lib是Linux 上的库的约定前缀,math 是共享库名字,so 是共享库的后缀名,1.1.1234的是共享库的版本号,其主版本号 小版本号 build号 。主版本号,代表当前动态库的版本,如果动态库的接口有变化,那么这个版本号就要加1;后面的两个版本号(小版本号 和 build 号)是告诉linux打包动态库命令你详细的信息,比如为一个hot-fix 而生成的一个版本,其小版本号加1,build号也应有变化 。这个文件名包含共享库的代码 。
第二个是动态库的soname( Short for shared object name),其是应用程序加载dll 时候,其寻找共享库用的文件名 。其格式为
libmath .so( major version number)
其只包含major version number,换句话说,也就是只要其接口没有变,应用程序都可以用,不管你其后minor build version or build version 。
问题来了 , 程序运行时怎么通过soname 找个real name? Soname 存在哪里?如果与real name 关联起来?什么时候存的?
这就是接下来要介绍的第三个共享库的名字,link name , 顾名思义,就是在编译过程,link 阶段用的文件名 。其将sonmae 和real name 关联起来 。
第三个名字 , 共享库的连接名(link name),是专门为build 阶段连接而用的名字 。这个名字就是libmath.so ,比如libmath.so 。其是不带任何版本信息的 。在共享库编译过程中,连接(link) 阶段,编译器将生成一个共享库及real name,同时将共享库的soname,写在共享库文件里的文件头里面 。可以用命令 readelf -d sharelibrary 去查看 。
linux tar打包、解包命令 解压
语法linux打包动态库命令:tar [主选项 辅选项] 文件或者目录
使用该命令时 , 主选项是必须要有的 , 它告诉tar要做什么事情 , 辅选项是辅助使用的 , 可以选用 。
主选项:
c 创建新的档案文件 。如果用户想备份一个目录或是一些文件 , 就要选择这个选项 。相当于打包 。
x 从档案文件中释放文件 。相当于拆包 。
t 列出档案文件的内容 , 查看已经备份了哪些文件 。
特别注意,在参数的下达中,c/x/t 仅能存在一个linux打包动态库命令!不可同时存在!因为不可能同时压缩与解压缩 。
辅助选项:
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩或解压? 一般格式为xx.tar.gz或xx. tgz
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩或解压?一般格式为xx.tar.bz2
-v :压缩的过程中显示文件!这个常用
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加其linux打包动态库命令他参数!
-p :使用原文件的原来属性(属性不会依据使用者而变)
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
范例:
范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc==仅打包 , 不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc==打包后,以 bzip2 压缩
特别注意,在参数 f 之后的文件档名是自己取的,linux打包动态库命令我们习惯上都用 .tar 来作为辨识 。
如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
如果加 j 参数,则以 .tar.bz2 来作为附档名啊~
上述指令在执行的时候 , 会显示一个警告讯息:
『tar: Removing leading `/" from member names』那是关於绝对路径的特殊设定 。
范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,
就得要加上 z 这个参数了!这很重要的!
【linux打包动态库命令 linux 动态库编译】范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说
我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz
则解开的目录会在 /usr/local/src/etc,另外 , 如果您进入 /usr/local/src/etc
则会发现,该目录下的文件属性与 /etc/ 可能会有所不同喔!
范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,
就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!
范例五:我要备份 /home, /etc,但不要 /home/dmtsai
[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
另外:tar命令的C参数
$ tar -cvf file2.tar /home/usr2/file2
tar: Removing leading '/' from members names
home/usr2/file2
该命令可以将/home/usr2/file2文件打包到当前目录下的file2.tar中,需要注意的是:
使用绝对路径标识的源文件,在用tar命令压缩后,文件名连同绝对路径(这里是home/usr2/,根目录'/'被自动去掉了)一并被压缩进来
。使用tar命令解压缩后会出现以下情况:
$ tar -xvf file2.tar
$ ls
…… …… home …… ……
解压缩后的文件名不是想象中的file2 , 而是home/usr2/file2 。
$ tar -cvf file2.tar -C /home/usr2 file2该命令中的-C dir参数,将tar的工作目录从当前目录改为/home/usr2,将file2文件(不带绝对路径)压缩到file2.tar中 。注意
:-C dir参数的作用在于改变工作目录,其有效期为该命令中下一次-C dir参数之前

使用tar的-C dir参数,同样可以做到在当前目录/home/usr1下将文件解压缩到其他目录 , 例如:
$ tar -xvf file2.tar -C /home/usr2
而tar不用-C dir参数时是无法做到的:
$ tar -xvf file2.tar /home/usr2
tar: /tmp/file: Not found in archive
tar: Error exit delayed from previous errors
linux下sqlite如何制作成动态库库1、下载源码,解压缩sqlite-autoconf-3300100.tar.gz
2、进入解压目录,执行:
#:./configure --host=arm CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g--prefix=/usr
其中--host=要运行程序的主机
CC/CXX为用到的交叉编译工具链
--prefix=安装目录
3、make
将在当前文件目录下,自动生成可执行文件sqlite3及静态库文件sqlite3.a文件linux打包动态库命令;
4、sudo make install
此命令会将可执行文件及静态库文件拷贝至安装目录中(也可手动拷贝)
5、以上步骤生成的可执行文件包含大量调试信息,文件比较大,可使用strip命令去掉其中的调试信息linux打包动态库命令;
#:arm-linux-gnueabi-strip sqlite3
6、生成动态库文件:
arm-linux-gnueabi-gccsqlite3.c-lpthread-ldl-fPIC-shared-olibsqlite3.so
交叉编译sqlite3,生成动态库
标签:refgcchostpthreadstripconfig安装目录工具链
linux--8、打包压缩文件命令tar命令用于对文件打包压缩或解压linux打包动态库命令:
$ tar [选项] [文件]
以下是tar命令的常用参数:
tar是个打包的命令 , 它的作用是将一堆的文件或目录归档成一个.tar结尾的文件 。生成tar包后,就可以用其linux打包动态库命令他的压缩程序来对tar包进行压缩 。
我们在上面看到的 -z 参数就是对tar包用Gzip程序进行了压缩,最后才生成了 .tar.gz 结尾的压缩包 。如果不用 -z 参数而使用 -j 参数,也就是用bzip2程序压缩tar包,最后就会生成 .tar.bz2 结尾的压缩包 。
使用tar命令打包压缩的一个好处是,它会保留原始文件的权限和属性 。
我们经常会在windows系统上使用 .zip 格式的压缩文件,在linux中也可以将文件和目录压缩成zip格式,或者解压zip格式的压缩包 。
但是zip的缺点是不能保留文件的权限和属性,解压后需要我们自己用chmod重新设置文件的权限 。
linux打包动态库命令的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于linux 动态库编译、linux打包动态库命令的信息别忘了在本站进行查找喔 。

    推荐阅读