精华内容
下载资源
问答
  • linux静态库,动态库和硬链接,软连接 标签:  杂谈 分类: linux/unix 静态库 1、命令gcc -c a.c b.c生成a.o和b.o; 2、命令ar -r libname.a a.o b.o生成包含名为libname.a的静态库; 3、命令...

    linux静态库,动态库和硬链接,软连接

    标签: 

    杂谈

    分类: linux/unix

    静态库

    1、命令gcc -c a.c b.c生成a.o和b.o;

    2、命令ar -r libname.a a.o b.o生成包含名为libname.a的静态库;

    3、命令gcc main.c libname.a可以在main中链接静态库libname.a。

    动态库(共享库)

    1、命令gcc -c a.c b.c生成a.o和b.o;

    2、命令gcc -shared libname.so a.o b.o生成包含名为libname.so的共享库;

    3、命令gcc main.c libname.so可以在main中链接动态库libname.a。与静态库不同,如果共享库(.so)文件被删除或被移动了,应用程序启动时会出错。

    硬链接(hard link)

    命令ln sourse dest可以为文件source创建一个名为dest的硬链接。两个文件指向同一块数据块,所以对任意文件修改都会反映到其它所有被链接的文件上。如果source被删除了,dest仍然有效,可以被使用。

    软链接(symbolic link)

    命令ln -s source dest可以为文件source创建一个名为dest的软链接。软链接类似于Windows上的快捷方式。一旦source不存在了,那么dest的文件也会失效。

    使用系统库

    通过硬链接的方式,可以把静态库和动态库放到/usr/lib目录下,这样可以简化gcc的编译命令。

    1、命令ln libname.a /usr/lib/或ln libname.so /usr/lib/把库文件libname.a或libname.so链接到/usr/lib下;

    2、命令gcc main.c -lname等同于gcc main.c /usr/lib/libname.so或gcc main.c /usr/lib/libname.so。

    同样可以把库文件链接到/lib目录下并使用-l前缀来指定引用的库。/usr/local/lib里的动态库文件(*.so)在使用-l前缀引用时,可以通过编译,但程序启动时会出错,静态库没有问题

    展开全文
  • 这是linux中一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s, 具体用法是:ln -s 源文件 目标文件。 当 我们需要在不同的目录,用到...
    这是linux中一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,
    具体用法是:ln -s 源文件 目标文件。
    当 我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的 目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。例如:ln -s /bin/less /usr/local/bin/less
    -s 是代号(symbolic)的意思。
    这 里有两点要注意:第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;第二,ln的链接又软链接 和硬链接两种,软链接就是ln -s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
    
    
    不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
      -f : 链结时先将与 dist 同档名的档案删除
      -d : 允许系统管理者硬链结自己的目录
      -i : 在删除与 dist 同档名的档案时先进行询问
      -n : 在进行软连结时,将 dist 视为一般的档案
      -s : 进行软链结(symbolic link)
      -v : 在连结之前显示其档名
      -b : 将在链结时会被覆写或删除的档案进行备份
      -S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾
      -V METHOD : 指定备份的方式
      --help : 显示辅助说明
      --version : 显示版本
    
    

    【硬连接】
    硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

    【软连接】
    另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

     

    2.通过实验加深理解
    [oracle@Linux]$ vi test.log                         #创建一个测试文件f1
    [oracle@Linux]$ ln test.log test1.log           #创建f1的一个硬连接文件test1.log
    [oracle@Linux]$ ln -s test.log test2.log       #创建f1的一个符号连接文件test2.log
    [oracle@Linux]$ ls -li                                 # -i参数显示文件的inode节点信息

    两种链接的区别:  

         硬链接文件有两个限制
       1)、不允许给目录创建硬链接;
       2)、只有在同一文件系统中的文件之间才能创建链接,而且只有超级用户才有建立硬链接权限。
           对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容。

              这时,系统就“忘记”了它曾经是硬链接文件。而把他当成一个普通文件。

             那么我们就可以这样理解:硬连接指通过索引节点来进行的连接,其作用是允许一个文件拥有多个有效路径名,能够达到误删除的作用。

          其原因是因为对应的文件的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它

          的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。文件才会被真正删除。

             注:保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index即I节点)。          

         软链接没有硬链接以上的两个限制,因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。但是软链接的缺点在于:因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

    展开全文
  • Linux链接动态库, ln -s命令

    千次阅读 2020-05-20 13:07:20
    链接又叫符号链接,可以将其视为文件的别名,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。链接的目的是我们需要在不同的目录用到... 命令解释:ln --- Linux命令 ...

       软链接又叫符号链接,可以将其视为文件的别名,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。软链接的目的是我们需要在不同的目录用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录放上该文件,然后在其它的 目录下链接(link)它就可以,不必重复的占用磁盘空间。

        命令格式:ln -s [源文件或目录] [目标文件或目录]

        命令解释:ln --- Linux命令

                         -s --- 参数,软链接(符号链接)

                         源文件或目录 --- 指的是需要连接的源文件,若不在当前目录下需要指明路径

                        目标文件或目录 --- 指的是期望使用时系统或程序需要寻找的文件

        示例:

        我需要用到Linux下存在软链接关系的.so动态库,在win下解压后失去了链接关系(直接把压缩包push到Linux下再解压会保持链接关系),如何才能再次从win下push到Linux后保持软链接关系呢。假如我对一个存在链接关系的动态库解压后生成了如下三个文件,其意思即为libglib-2.0.so链接了libglib-2.0.so.0,libglib-2.0.so.0链接了libglib-2.0.so.0.6400.2。系统调用的时候直接找到是libglib-2.0.so文件,但实际内容却在最终链接的libglib-2.0.so.0.6400.2内。

    libglib-2.0.so
    libglib-2.0.so.0
    libglib-2.0.so.0.6400.2

        如何才能把win平台下解压后的这个动态库用到Linux系统的system/lib下呢?步骤如下:

        1.首先把原文件从win上push到Linux的system/lib内:

        adb push C:\test\libglib-2.0.so.0.6400.2 system/lib

        2.进入到Linux的system/lib目录内,创建libglib-2.0.so.0.6400.2与libglib-2.0.so.0的软链接:

        ln -s libglib-2.0.so.0.6400.2 libglib-2.0.so.0

        3.继续在当前system/lib目录内,创建libglib-2.0.so.0与libglib-2.0.so的软链接:

        ln -s libglib-2.0.so.0 libglib-2.0.so

        经过以上三个步骤,这三个文件的软链接建立完毕,可以使用ls -l命令查看,显示如下结果即为链接成功:

       

    【附ln命令的其他参数】---------------------------------------------------------------------------------------------------------------------------

    必要参数:

    -b 删除,覆盖以前建立的链接
    -d 允许超级用户制作目录的硬链接
    -f 强制执行
    -i 交互模式,文件存在则提示用户是否覆盖
    -n 把符号链接视为一般目录
    -s 软链接(符号链接)
    -v 显示详细的处理过程


    选择参数:

    -S “-S<字尾备份字符串> ”或 “--suffix=<字尾备份字符串>”

    -V “-V<备份方式>”或“--version-control=<备份方式>”

    --help 显示帮助信息

    --version 显示版本信息

    展开全文
  • Linux动态库连接

    2011-10-20 15:47:33
    发布时应用的资料,应用于qt开发发布,希望大家会用,
  • 目的: 在不改变原目录/文件的前提下,起一个方便的别名 创建符号链接的方法是: ln -s 源文件/目录名 符号链接名,例如 ln -s /etc/apache2/sites-enables ~/webcfg 如果符号链接的源是一个目录,那么就用普通...

    目的:

    • 在不改变原目录/文件的前提下,起一个方便的别名

    创建符号链接的方法是:

    • ln -s 源文件/目录名 符号链接名,例如
    ln -s /etc/apache2/sites-enables ~/webcfg
    
    如果符号链接的源是一个目录,那么就用普通的cd命令即可进入,例如:
    cd ~/webcfg
    
    展开全文
  • 1.什么是库 在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,... linux下的库有两种:静态库和共享库(动态库)。动态通常用.so为后缀,静态用.a为后缀。例如:libhello...
  • Linux链接动态库方式

    千次阅读 2018-04-21 17:09:41
    Linux下应用程序链接动态库有以下三种方式:改变LD_LIBRARY_PATHexport LD_LIBRARY_PATH=/home/bow/all/program/test/lib_version_test:$LD_LIBRARY_PATH这里/home/bow/all/program/test/lib_version_test是共享库的...
  • linux系统下,当系统中存在多个相同命名的动态库(.so)时,ldconfig只为执行程序链接最后找到的库,而之后找到的库虽然通过“ifconfig -p”可以看到库路径信息,但不会被链接到执行程序。   在实际编程中,...
  • 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻。在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情。 在Linux操作系统中,普遍使用ELF格式作为可执行程序...
  • Linux动态库的编译及使用示例

    千次阅读 2019-08-07 16:50:21
    1、动态库的编译 下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:so_test.h,三个.c文件:test_a.c、 test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。 //so_test.h: #...
  • 文章目录linux解决动态库链接失败的四种方法方法一:方法二:方法三:方法四: linux解决动态库链接失败的四种方法 方法一: 将库存放到系统库目录/lib中 (禁止使用) 方法二: 此方法仅供临时测试使用,将动态库的...
  • Linux加载动态库的几种方法

    千次阅读 2018-10-19 14:12:29
    ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib) 以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文...
  • Linux动态库的创建与链接

    千次阅读 2017-02-08 17:29:11
    一般Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的搜索路径,所以使用这两个目录中的时不需要进行设置搜索路径即可直接使用。对于处于默认搜索路径之外的,需要将的位置添加到 的搜索路径之中。...
  • linux默认cp命令是有别名的,也就是说在执行cp命令的时候,实际上执行的是别名的命令。 通过alias命令可以查看当前系统的别名设置情况: 可以看到cp命令已经设置了别名。这样即使使用cp -f也不会生效。 \cp会调用...
  • //动态库接口文件getmaxlen.h #ifndef _GETMAXLEN_H_ #define _GETMAXLEN_H_ int getMaxLen(int *sel,int N); #endif 文件2.动态库程序实现文件 //动态库程序实现文件getmaxlen.c #include "getmaxlen.h" int...
  • linux动态库soname简介

    千次阅读 2019-06-30 12:17:26
    linux动态库 Linux 支持两种类型的库,每一种库都有各自的优缺点。 静态库包含在编译时静态绑定到一个程序的函数。动态库则不同,它是在加载应用程序时被加载的,而且它与应用程序是在运行时绑定的。 静态库较适宜...
  • 1、执行以下命令生成Makefile文件 ./config -shared --prefix=$(pwd)/lib -fPIC 2、修改Makefile文件 第一处: VERSION=1.0.1e MAJOR=1 MINOR=0.1 SHLIB_VERSION_NUMBER=1.0.0 ...SHLIB_MINOR...
  • 本文介绍了Linux下Qt、动态库、静态链接库的创建以及使用的两种方法(显示链接及隐式链接),分享了在使用显示链接中遇到的坑及解决办法,希望能帮到大家。
  • linux动态库类的调用

    千次阅读 2016-06-15 18:18:09
    关于动态调用动态库方法说明  一、 动态库概述  1、 动态库的概念  日常编程中,常有一些函数不需要进行编译或者可以在多个文件中使用(如数据库输入/输出操作或屏幕控制等标准任务函数)。可以事先对这些函数...
  • Linux 静态链接动态连接库

    千次阅读 2016-02-15 13:49:23
    下面给出实例代码演示Linux下面静态链接动态链接的区别:静态链接动态链接都是共享代码的方式,如果采用静态链接,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。...
  • 一.库 什么是库,简单的可以说是可执行代码的二进制...linux下静态库(.a)文件,动态库(.so)文件。主要存放函数库的路径有:/lib , /usr/lib. 二.静态库与动态库 1.静态库 这类库的名字一般是libname.a.利用静态库
  • linux动态库命名规则

    千次阅读 2018-11-02 13:28:38
    说道“动态库版本兼容”,很多人头脑中首先蹦出的就是“Dll Hell”。啊,这曾经让人头疼的难题。时至今日,这个难题已经很好地解决了。   在进一步讨论之前来思考一个问题:Linux下为什么没有让人头痛的“DllHell”...
  • linux默认对库的连接是使用动态库 在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库。 使用方式为: gcc test.cpp -L. -ltestlib 如果当前目录有两个库...
  • https://www.cnblogs.com/ucas/p/5778664.html(linux系统c++编译连接过程)http://www.cnblogs.com/skynet/p/3372855.html(动态库与静态库)
  • Linux-动态链接与静态链接对比(动态库和静态库)

    千次阅读 多人点赞 2017-12-14 17:52:46
    一、库的基础概念: 在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。...按照库的使用方式又可分为动态库和静态库,在不同平台下...
  • 动态库*.so在linux下用c和c++编程时经常需要使用。1、动态库的编译 下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一...
  • 众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib(不管是编译还是运行都会默认搜索这两个路径)。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统...
  • 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻。在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情。 在Linux操作系统中,普遍使用ELF格式作为可执行...
  • Linux使用静态库和动态库

    千次阅读 2016-05-08 16:28:07
    Linux使用静态库和动态库
  • 在开发中我们常常需要查看一个应用究竟链接了哪些对应的动态库 桌面linux的使用方法不赘述,网上资料有很多,对于嵌入式linux开发中,我们在ubuntu中使用ldd 是不行的 应该使用 这样就得到了我们的结果 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 113,395
精华内容 45,358
关键字:

linux动态库软连接

linux 订阅