精华内容
下载资源
问答
  • Linux的安装
    千次阅读
    2019-01-21 15:08:37

    命令安装的库的命名一般是lib(库名)-dev

    比如显示缺少zip.h文件,推断可能是少zip

    命令:

    sudo apt-get install libzip-dev

    yum 命令类似

    更多相关内容
  • Linux库文件使用与编译

    千次阅读 2018-10-11 17:41:53
    Linux库文件 静态库 在Linux中,以.a为后缀,如libtest.a 直接拷贝函数到二进制映像文件 只需要运行二进制文件,可以直接运行 共享库 在Linux操作系统中,以libxxx.so.x.x为格式命名 可执行文件在开始运行时将...

    介绍在Linux下使用静态库、共享库、动态库的方法。

    Linux库文件

    • 静态库
      • 在Linux中,以.a为后缀,如libtest.a
      • 直接拷贝函数到二进制映像文件
      • 只需要运行二进制文件,可以直接运行
    • 共享库
      • 在Linux操作系统中,以libxxx.so.x.x为格式命名
      • 可执行文件在开始运行时将函数从共享库文件中读出,从而间接引用
      • 好处是,当函数接口没变,实现改变时,不需要再次编译
    • 动态库
      • 动态加载库在指定位置加载的函数库
      • 可以减少内存开销

    库函数基本路径

    • /lib
      • 标准共享库和静态库
    • /usr/lib
      • 标准共享库和静态库
    • /usr/local/lib
      • 本地函数库

    库文件搜索顺序

    1. 首先在“LD_LIBRARY_PATH”环境变量所设置的路径下查找(一般都没有给此环境变量赋值)
    2. 搜索动态装载器在/etc目录下的缓存文件/etc/ld.so.cache(此文件由命令ldconfig创建更新)。
    3. ldd命令–查看到某可执行程序共享库清单

    创建静态库

    • libhello.c为要构建的库文件源文件,libhello.h为调用此库文件的头文件,usehello.c为测试程序。

      • 53922333150
    • 首先将所需要文件编译成目标文件

      • gcc -c libhello.c
        
    • 使用ar命令创建静态库

      • ar rc libhello.a libhello.o
        
    • 编译运行

      • gcc -o usehello_static usehello.c libhello.a
        
    • 53922368937

    创建共享库

    • 首先将所需要的库编译成目标代码,这里生成与位置无关,可以在任何地址被链接和装载:

      • gcc -fPIC -Wall -g -c libhello.c
        
    • 使用-shared来创建共享库

      • gcc -g -shared -Wl,-soname,libhello.so.1.0 -o libhello.so.1.0 libhello.o
        
      • 这里的so.1.0表示对应的完整版本号,具体可参考这里

    • 创建soname连接:

      • ln -sf libhelloso.1.0 libhello.so
        
      • 这里创建一个链接,只是为了方便以后版本更新时,只需要更改链接的路径,不改变编译代码

    • 编译并连接引用库文件

      • gcc -Wall -g -c usehello -o usehello.o
        gcc -g -o usehello_dynamic usehello.o -L ./ -lhello //连接引用库文件
        
      • 其中,-L表示搜索路径,./表示搜索当前路径

      • -lhello

        • 会自动在-l前变为lib,加上.so,变为libhello.so
    • 运行,需要添加当前目录pwd到环境变量中

      • LD_LIBRARY_PATH=$(pwd) ./usehello_dynamic 
        
    • 如果希望在使用连接器时不使用-Ldirectory标识就可以查找到该库,则可以采用以下方式之一:

      • 把此库拷贝到/usr/lib或者/lib文件夹中,或者在此两个文件夹任意一个中创建一个到该库的快捷方式,并命名为libname.so
      • 如果库所在路径没有在/usr/lib和/lib文件夹下,需要将该路径添加到文件“/etc/ld.so.conf”中,每一行增加一个路径,完成以上设置后,然后运行ldconfig命令更新库信息。

    动态库

    • 在Linux中,动态库的文件格式跟共享库没有区别,主要区别在于共享库是运行时加载。

    • 有专门的一组API用于完成打开动态库,查找符号,处理出错,关闭动态库等功能。

      • dlopen
      • dlerror
      • dlsym
      • dlclose
    • 使用示例

      • 53924215058

    展开全文
  • linux 的依赖和链接的顺序

    千次阅读 2016-02-25 19:11:36
    linux库的依赖和链接先后顺序

    今天在归档minigui时,发现一个奇怪的问题。minigui的静态库加minigui软键盘的静、动态库怎么编译都通不过。而minigui的动态库加minigui软键盘的静、动态库都可以编译通过。且minigui的动、静态库是一个版本编译出来的。其中minigui的软键盘库是依赖于minigui库。

    #################################################

    libminigui.a 和libmgi.so    编译通不过

    libminigui.a和libmgui.a 编译通不过

    libminigui.so和libmgi.so  编译通过

    libminigui.so和libmgui.a  编译通过


    郁闷好久,最后无意中发现了原因。


    makefile中的链接顺序不对, 库的链接如下:-lminigui -lmgi。改为:-lmgi -lminigui

     总结:当A库依赖于B库时,B库是用的静态库,则在编译的时候链接顺序应该是 -lA -lB


    展开全文
  • 完美解决Linux环境编译ffmpeg

    千次阅读 2022-03-11 14:35:07
    项目功能实现需要在Linux下编译出可用的FFmpeg。FFmpeg在编译过程中是需要链接其它三方的,比如x265 x265等,否则可能会造成功能不全(如程序接口返回找不到H264编码器错误),影响使用。编译这种三方其实理论...

    背景说明

    项目功能实现需要在Linux下编译出可用的FFmpeg库。FFmpeg在编译过程中是需要链接其它三方库的,比如x265 x265等,否则可能会造成功能不全(如程序接口返回找不到H264编码器错误),影响使用。编译这种三方库其实理论简单,但是细节磨人,有时候没设置好就是会有些莫名其妙的问题。我这里也参考了如零声学院分享的文档,结合自己情况总结记录了份编译说明,亲测有效,使用稳定。甚至可以按步骤无脑复制shell执行,编译一路绿灯,快速得到完美的FFmpeg库。

    编译

    整体思路就是先把依赖的库如x264、x265等先配置好,这些库不是必须的,但是保证库功能完整性最好都配置好。接下来就是下载FFmpeg源码,和依赖库进行配置然后进行编译,编译完成库即可用了。当前环境是 ubuntu18 desktop + ffmpeg 4.2.1

    注意

    (1)所有操作以我的环境为准,但可以完全按以下步骤依次复制命令执行,因为我是在home目录是通用的,建议按照此方法。如果想使用自己的路径要注意修改命令参数,防止路径不同造成的错误
    (2)部分库可能需要连接github,最好选择网络较好的机器上编译
    (3)整个安装过程,基本就是复制命令执行,等待执行结束。。。循环。测试多台机器编译过程中均无报错,正常情况预计用时15分钟以内,即可完成全部编译工作

    一、创建目录

    在home目录下创建
    ffmpeg_sources:用于下载源文件
    ffmpeg_build: 存储编译后的库文件
    bin:存储二进制文件(ffmpeg,ffplay,ffprobe,X264,X265等)
    命令:

    cd ~ 
    mkdir ffmpeg_sources  ffmpeg_build bin
    

    二、安装依赖

    更新软件信息

    sudo apt-get update
    

    安装需要的组件

    sudo apt-get -y install \
      autoconf \
      automake \
      build-essential \
      cmake \
      git-core \
      libass-dev \
      libfreetype6-dev \
      libsdl2-dev \
      libtool \
      libva-dev \
      libvdpau-dev \
      libvorbis-dev \
      libxcb1-dev \
      libxcb-shm0-dev \
      libxcb-xfixes0-dev \
      pkg-config \
      texinfo \
      wget \
      zlib1g-dev
    

    三、安装三方库

    安装一些最常见的第三方库,默认均以源码方式安装。安装库所需的命令如下

    NASM
    部分库使用到汇编程序。
    使用源码进行安装

    cd ~/ffmpeg_sources && \
    wget https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.bz2 && \
    tar xjvf nasm-2.14.02.tar.bz2 && \
    cd nasm-2.14.02 && \
    ./autogen.sh && \
    PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
    make && \
    make install
    

    Yasm
    部分库使用到该汇编库
    使用源码进行安装:

    cd ~/ffmpeg_sources && \
    wget -O yasm-1.3.0.tar.gz https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz && \
    tar xzvf yasm-1.3.0.tar.gz && \
    cd yasm-1.3.0 && \
    ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
    make && \
    make install
    

    libx264
    H.264视频编码器。更多信息和使用范例参考H.264 Encoding Guide
    要求编译ffmpeg时配置:–enable-gpl --enable-libx264.
    使用源码进行编译:

    cd ~/ffmpeg_sources && \
    git -C x264 pull 2> /dev/null || git clone --depth 1 https://gitee.com/mirrors_addons/x264.git && \
    cd x264 && \
    PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-pic && \
    PATH="$HOME/bin:$PATH" make && \
    make install
    

    libx265
    H.265/HEVC 视频编码器, 更多信息和使用范例参考H.265 Encoding Guide。
    要求编译ffmpeg时配置:–enable-gpl --enable-libx265.
    使用源码进行编译:

    sudo apt-get install mercurial libnuma-dev && \
    cd ~/ffmpeg_sources && \
    if cd x265 2> /dev/null; then git pull && cd ..; else git clone https://gitee.com/mirrors_videolan/x265.git; fi && \
    cd x265/build/linux && \
    PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source && \
    PATH="$HOME/bin:$PATH" make && \
    make install
    

    libvpx
    VP8/VP9视频编解码器。 更多信息和使用范例参考VP9 Video Encoding Guide 。
    要求编译ffmpeg时配置: --enable-libvpx.
    使用源码进行编译:

    cd ~/ffmpeg_sources && \
    git -C libvpx pull 2> /dev/null || git clone --depth 1 https://github.com/webmproject/libvpx.git && \
    cd libvpx && \
    PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm --enable-pic && \
    PATH="$HOME/bin:$PATH" make && \
    make install
    

    libfdk-aac
    AAC音频编码器. 更多信息和使用范例参考AAC Audio Encoding Guide。
    要求编译ffmpeg时配置:–enable-libfdk-aac ( 如果你已经配置了 --enable-gpl则需要加上–enable-nonfree).
    使用源码进行编译:

    cd ~/ffmpeg_sources && \
    git -C fdk-aac pull 2> /dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac && \
    cd fdk-aac && \
    autoreconf -fiv && \
    ./configure CFLAGS=-fPIC --prefix="$HOME/ffmpeg_build"   && \
    make && \
    make install
    

    libmp3lame
    MP3音频编码器.
    要求编译ffmpeg时配置:–enable-libmp3lame.
    使用源码进行编译:

    cd ~/ffmpeg_sources && \
    git clone  --depth 1 https://gitee.com/hqiu/lame.git && \
    cd lame && \
    PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"  --enable-nasm --with-pic && \
    PATH="$HOME/bin:$PATH" make && \
    make install
    

    libopus
    Opus音频编解码器.
    要求编译ffmpeg时配置:–enable-libopus.
    使用源码进行编译:

    cd ~/ffmpeg_sources && \
    git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git && \
    cd opus && \
    ./autogen.sh && \
    ./configure --prefix="$HOME/ffmpeg_build"  -with-pic&& \
    make && \
    make install
    

    四、安装FFmpeg

    到这里常见的三方库默认已经都装好了,唠叨下,上面的库可以不全安装,但是为了库的功能全面性,还是别偷懒,毕竟编译好,可以一直用。下面下载FFmpeg源码和上面的库联合编译,此过程相对用时久一些,耐心等待

    cd ~/ffmpeg_sources && \
    wget -O ffmpeg-4.2.1.tar.bz2 https://ffmpeg.org/releases/ffmpeg-4.2.1.tar.bz2 && \
    tar xjvf ffmpeg-4.2.1.tar.bz2 && \
    cd ffmpeg-4.2.1 && \
    PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" CFLAGS="-O3 -fPIC" ./configure \
      --prefix="$HOME/ffmpeg_build" \
      --pkg-config-flags="--static" \
      --extra-cflags="-I$HOME/ffmpeg_build/include" \
      --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
      --extra-libs="-lpthread -lm" \
      --bindir="$HOME/bin" \
      --enable-gpl \
      --enable-libass \
      --enable-libfdk-aac \
      --enable-libfreetype \
      --enable-libmp3lame \
      --enable-libopus \
      --enable-libvorbis \
      --enable-libvpx \
      --enable-libx264 \
      --enable-libx265 \
      --enable-pic \
      --enable-shared   \
      --enable-nonfree && \
    PATH="$HOME/bin:$PATH" make && \
    make install && \
    hash -r
    

    五、安装完成

    到此,整个编译就完成了。可以去看下最初创建的那三个文件夹,我们最感兴趣的是ffmpeg_build,如下图。
    include: 里面是各种头文件,用来加入到业务项目中引用
    lib: 便是心心念的库,里面有静态的还有动态的,按自己需求使用
    编译库文件
    还有像ffmpeg ffplay ffprobe等可执行程序,在以上三个文件夹内可以找到,具体位置不在说明。要说明一点是,这里只是编译出来纯粹的库文件,可以保证库的质量,但具体的使用需自行配置。

    展开全文
  • Linux快速查找文件位置

    千次阅读 2020-09-10 16:14:42
    ldconfig -p | grep lib_name ldconfig -p 会打印出当前系统已经安装的动态信息,然后使用grep找你的lib即可
  • Linux中的(Library)

    千次阅读 2018-08-25 16:28:06
    一、文件 是一组预先编译好的函数的集合,这些函数都...在Linux中,标准的文件一般存放在/lib和usr/lib的目录中。c语言编译器gcc(更确切的说是链接程序)需要知道要搜索哪些文件,因为默认情况下,它只搜...
  • linux下查看是否存在

    千次阅读 2018-11-30 16:04:17
    在做Linux开发的时候,往往会出现 某些 can not found 的情况,在我们添加了这些之后,如何查看这些的路径是否被识别了呢?下面介绍一个命令:  ldconfig -p | grep lts 说明:使用 ldconfig -p 命令用来...
  • linux下添加的加载路径

    千次阅读 2019-08-09 12:43:29
    1.修改环境变量 export LD_LIBRARY_PATH=path_name 2.修改配置文件 修改/etc/ld.so.conf的内容在最后添加加载的新的路径,然后执行:ldconfig 使配置生效。
  • 由于对同样的的源码 有的使用4.1.2编译器编译的 有的是4.1.1等等,结果导致有时候存放的时候忘记了写版本信息,导致要重新编译。 解决方法: objdump -s --section=.comment your_program 查看程序编译器...
  • linux下链接文件默认搜索路径

    千次阅读 2019-12-04 20:28:16
    文件包含静态文件和动态文件。 静态就是在链接的时候加入到执行代码中,成为了代码的一部分,所以生成的可执行文件就比较大,以后和静态没瓜葛了,自己随便用了;...一般 Linux 系统把 /lib ...
  • linux静态 动态 去符号 符号恢复

    千次阅读 2018-04-17 00:45:08
    前言 最近遇到了一题去除符号的题目,需要进行符号修复。为此学习了一波,顺便补了补其它的一下知识。 准备知识 命名方式: ...动态libxxx.so.major.minor .so .dll 静态:libxxx.a .a ....生成静态 ar cqs l...
  • Linux系统中添加文件路径的方法

    万次阅读 多人点赞 2017-02-23 16:44:13
    一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的搜索路径,所以使用这两个目录中的时不需要进行设置搜索路径即可直接使用。但是,对于处于默认搜索路径之外的,就需要将的位置添加到的搜索路径...
  • Linux查看依赖方法

    万次阅读 2018-04-27 11:54:44
    1.查看依赖的:objdump -x xxx.so | grep NEEDED2.查看可执行程序依赖的:objdump -x 可执行程序名 | grep NEEDED3.查看缺少的:ldd xxx.so如果某个依赖的不存在,会打印类似“xxx.so not found”的提示。.....
  • Linux动态环境变量设置

    万次阅读 2018-06-30 15:46:26
    永久生效的环境变量设置,编辑/...动态环境变量设置: LD_LIBRARY_PATH= folder : $LD_LIBRARY_PATH export LD_LIBRARY_PATH folder指的是动态文件夹所在位置。例如,.so等文件在:/home/lib/下,则folder就是...
  • Linux查看某个是否安装

    万次阅读 2017-08-03 16:39:34
    $ ldconfig -p | grep pcap 说明: ldconfig -p:打印当前缓存所保存的...“ldconfig主要是在默认搜寻目录/lib和/usr/lib以及动态配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接(格式如li
  • Linux安装字体

    千次阅读 2022-03-16 11:57:39
    由于生成图片的方法中用到了微软黑体,部署到服务器后显示乱码。安装字体即可 安装前: 安装后: 1. 在Linux上安装字体 ...在Linux的/usr/share/fonts下新建一个chinese目录,将windows上的字体全部拷.
  • 解决Linux系统下使用yum命令“无法启用仓库”的错误 这个问题困扰我好久,查了很多资料也没解决。最后茅塞顿开了,我们一般部署虚拟机是安装Ubuntu的,但Ubuntu下不支持使用yum命令,所以,你只需: 把: “yum -y ...
  • Linux:查看动态/程序依赖的

    千次阅读 2022-03-12 14:36:05
    # 查看依赖的 objdump -x xxx.so | grep NEEDED # 查看可执行程序依赖的 objdump -x ./testTime | grep NEEDED readelf命令 # 查看依赖的 readelf -a xxx.so | grep "Shared" # 查看可执行程序依赖的 ...
  • OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言...
  • 一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的搜索路径,所以使用这两个目录中的时不需要进行设置搜索路径即可直接使用。对于处于默认搜索路径之外的,需要将的位置添加到的搜索路径之中。...
  • 本文介绍了Linux下Qt、动态、静态链接的创建以及使用的两种方法(显示链接及隐式链接),分享了在使用显示链接中遇到的坑及解决办法,希望能帮到大家。
  • linux下查看程序依赖的

    千次阅读 2021-05-12 02:42:03
    在x86下,为了查看程序所依赖的,可使用linux 但若是是使用arm-linux-gcc 等交叉编译环境编译出来的程序,则要使用web 用于将类似函数打包在一个单元中。而后这些单元就可为其余开发人员所共享,并所以有了模块化...
  • Linux 编译cpp为动态so文件

    千次阅读 2019-01-07 10:54:50
    g++ hash.cpp -fPIC -shared -o hash.so
  • 载入库文件有两个函数,System.load 和 System....当使用System.loadlibrary时是在系统的library 的目录中需找复合条件的文件,可以使用-Djava.library.path=[path]参数,来指定Java程序加载文件的...
  • 查看linux库文件32位还是64位

    万次阅读 2014-09-25 09:46:11
    objdump -a *.a objdump -a *.so
  • 二、Linux相对简单一点 1、同样是先编写头文件以及对应的源文件。 2、g++ -fPIC -shared -o libOnvifSnapShot.so(动态名字) OnvifSnapShot.cpp(生成动态所需要的源文件) 已生成。 3、...
  • 1.1 安装使用C++的Linux开发的工具集 首先需要在Visual Studio Installer中安装使用C++的linux开发的工具集 等待使用C++的Linux开发的工具集安装完成,并重启Visual Studio。 1.2 准备可远程的Linux服务器以及在...
  • linux系统下,当系统中存在多个相同命名的动态(.so)时,ldconfig只为执行程序链接最后找到的,而之后找到的虽然通过“ifconfig -p”可以看到路径信息,但不会被链接到执行程序。   在实际编程中,...
  • linux_MIB MIB标准

    热门讨论 2010-10-08 14:42:41
    linux_MIB MIB标准
  • 跨平台的socket,windows-linux-socket

    热门讨论 2015-06-10 11:45:00
    跨平台的socket,windows-linux-socket

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,090,681
精华内容 436,272
关键字:

linux库

友情链接: wdm_driver.rar