美文网首页
linux # .a & .so

linux # .a & .so

作者: FlyingPenguin | 来源:发表于2018-07-25 19:10 被阅读16次

    Linux Library Types:

    There are two Linux C/C++ library types which can be created:

    • Static libraries (.a):
      Library of object code which is linked with, and becomes part of the application.
    • Dynamically linked shared object libraries (.so):
      There is only one form of this library but it can be used in two ways.
      Dynamically linked at run time. The libraries must be available during compile/link phase. The shared objects are not included into the executable component but are tied to the execution.
      Dynamically loaded/unloaded and linked during execution (i.e. browser plug-in) using the dynamic linking loader system functions.

    A .a file is a static library, while a .so file is a shared object dynamic library similar to a DLL on Windows.
    A .a can included as part of a program during the compilation & .so can imported, while a program loads.

    .a是静态库。
    .so是动态库。

    When you link against the *.a, the code from the library is included in the executable itself and the executable can be run without requiring the *.a file to be present.
    When you link against the *.so, that is not the case and the *.so file must be present at runtime.

    .a的方式,.a中的内容是包含在二进制文件中的,所以二进制文件运行的时候不需要*.a file。

    Static Libraries: (.a)

    As a follow on, a .a file is an "ar" archive.
    Not unlike a tar archive, it stores .o or object files, allowing them to be pulled out of the archive, and linked into a program, among other things. You could use ar to store other files if you wanted.

    Create library "libctest.a"
    ar -cvq libctest.a ctest1.o ctest2.o
    
    get a listing of the members of an ar file

    You can get a listing of the members of an ar file with the -t parameter, for instance:

    linux下,在ffmpeg目录下

     ar -t libavformat/libavformat.a
    

    运行结果:

    [root@localhost libavformat]# ar -t libavformat.a
    3dostr.o
    ...
    mov.o
    ...
    yuv4mpegdec.o
    yuv4mpegenc.o
    
    Linking with the library
    cc -o executable-name prog.c libctest.a
    cc -o executable-name prog.c -L/path/to/library-directory -lctest
    

    Dynamically Linked "Shared Object" Libraries: (.so)

    A .so file is a "shared object" file, and has a lot more information available to the linker so that members can be linked in to a loading program as rapidly as possible.

    References:

    https://stackoverflow.com/questions/12293530/what-is-the-difference-between-so-and-a-files
    https://unix.stackexchange.com/questions/13192/what-is-the-difference-between-a-and-so-file
    http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

    相关文章

      网友评论

          本文标题:linux # .a & .so

          本文链接:https://www.haomeiwen.com/subject/axlmmftx.html