zoukankan      html  css  js  c++  java
  • 静态编译生成可移植的软件

    静态编译生成可移植的软件

    主要工作是将一些库进行静态编译,可以在其它未安装这些库的机器上直接运行。

    一、libvdpau的问题

    如果有目标机的管理员权限的话,可以直接安装软件。

    sudo apt install libvdpau-dev
    

    没有没有的话,可以在编译ffmpeg时禁掉vdpau:

    ./configure --enable-shared --disable-vdpau
    

    或者使用apt source下载源码手动编译成静态库:

    $ apt source libvdpau-dev
    E: You must put some 'source' URIs in your sources.list
    

    因为/etc/apt/source.list里的deb-src都被注释掉了,可以直接在/etc/apt/source.list中把deb-src注释打开,或者在软件更新中勾上源代码更新。

    再运行apt source libvdpau-dev会拉下来一个libvdpau-1.1.1目录,进入目录,配置编译,会在src/.libs目录生成libvdpau.a

    ./configure --disable-shared
    

    二、FFmpeg

    ./configure --disable-shared
    

    三、OpenCV

    OpenCV使用静态库:

    cmake  -D BUILD_SHARED_LIBS=OFF -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF ..
    

    其它

    可以通过camke -LH ../查看当前cmake选项,可以通过-D去设置该值。

    同一目录下有libxxx.a文件和libxxx.so文件,gcc默认会链接so,改变这一默认行为的方法就是:将"-lxxx"改为"-l:libxxx.a"

    可以通过ldd查看可执行程序的软件库依赖情况:

    ./test6: /lib/x86_64-linux-gnu/libssl.so.1.0.0: version `OPENSSL_1.0.2' not found (required by ./test6)
    ./test6: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./test6)
    ./test6: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./test6)
        linux-vdso.so.1 =>  (0x00007ffdb6f18000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fde407ab000)
        libjson-c.so.2 => /lib/x86_64-linux-gnu/libjson-c.so.2 (0x00007fde405a0000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fde40387000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fde40183000)
        libgtk-x11-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 (0x00007fde3fb46000)
        libgdk-x11-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0 (0x00007fde3f893000)
        libcairo.so.2 => /usr/lib/x86_64-linux-gnu/libcairo.so.2 (0x00007fde3f588000)
        libgdk_pixbuf-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0 (0x00007fde3f367000)
        libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007fde3f116000)
        libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fde3ee0e000)
        libjpeg.so.8 => /usr/lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007fde3ebb9000)
        libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007fde3e993000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fde3e78b000)
        libvdpau.so.1 => not found
        libva.so.1 => /usr/lib/x86_64-linux-gnu/libva.so.1 (0x00007fde3e575000)
        libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fde3e240000)
        libva-drm.so.1 => /usr/lib/x86_64-linux-gnu/libva-drm.so.1 (0x00007fde3e03d000)
        libva-x11.so.1 => /usr/lib/x86_64-linux-gnu/libva-x11.so.1 (0x00007fde3de37000)
        libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fde3dbd8000)
        libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fde3d7fc000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fde3d4f8000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fde3d1f2000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fde3cfdc000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fde3cc13000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fde409c9000)
        libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007fde3ca0f000)
        libpangocairo-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 (0x00007fde3c802000)
        libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007fde3c5fc000)
        libatk-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libatk-1.0.so.0 (0x00007fde3c3da000)
        libgio-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0 (0x00007fde3c067000)
        libpangoft2-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 (0x00007fde3be52000)
        libpango-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007fde3bc05000)
        libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007fde3b9c9000)
        libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007fde3b7bf000)
        libXinerama.so.1 => /usr/lib/x86_64-linux-gnu/libXinerama.so.1 (0x00007fde3b5bc000)
        libXi.so.6 => /usr/lib/x86_64-linux-gnu/libXi.so.6 (0x00007fde3b3ac000)
        libXrandr.so.2 => /usr/lib/x86_64-linux-gnu/libXrandr.so.2 (0x00007fde3b1a2000)
        libXcursor.so.1 => /usr/lib/x86_64-linux-gnu/libXcursor.so.1 (0x00007fde3af98000)
        libXcomposite.so.1 => /usr/lib/x86_64-linux-gnu/libXcomposite.so.1 (0x00007fde3ad95000)
        libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007fde3ab92000)
        libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007fde3a980000)
        libpixman-1.so.0 => /usr/lib/x86_64-linux-gnu/libpixman-1.so.0 (0x00007fde3a6d7000)
        libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fde3a434000)
        libxcb-shm.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007fde3a231000)
        libxcb-render.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-render.so.0 (0x00007fde3a028000)
        libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fde39e09000)
        libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007fde39c01000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fde399c3000)
        libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007fde397b5000)
        libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007fde39592000)
        libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fde39377000)
        libharfbuzz.so.0 => /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007fde39122000)
        libthai.so.0 => /usr/lib/x86_64-linux-gnu/libthai.so.0 (0x00007fde38f19000)
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fde38cef000)
        libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fde38aeb000)
        libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fde388e5000)
        libgraphite2.so.3 => /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007fde386c9000)
        libdatrie.so.1 => /usr/lib/x86_64-linux-gnu/libdatrie.so.1 (0x00007fde384c2000)
    

    由于目标机和当前Ubuntu发行版不一致,导致一些库版本不匹配,如stdc++, libssl,把这些库都进行了静态编译。最后经过编译,软件可以成功在其它机子上运行。

  • 相关阅读:
    回文自动机(PAM) 学习笔记
    UOJ#103. 【APIO2014】Palindromes PAM模板题
    UOJ#348. 【WC2018】州区划分
    STL 抄袭笔记
    ZJOI2019Day1 游记
    UOJ#370. 【UR #17】滑稽树上滑稽果 动态规划
    UOJ#24. 【IOI2014】Rail 交互题
    UOJ#373. 【ZJOI2018】线图 搜索,树哈希,动态规划
    UOJ#75. 【UR #6】智商锁 随机化算法 矩阵树定理
    AtCoder Grand Contest 031 (AGC031) D
  • 原文地址:https://www.cnblogs.com/gr-nick/p/11102644.html
Copyright © 2011-2022 走看看