代码位置: fission/environments/go/server

Go Plugin

编译、链接、装载

I Need Know About Compile Link Load Execute

库文件

静态库文件(如.a)

wiki解释:Static_library

静态库在编译/链接期间与其他静态库和目标文件合并以形成单个可执行文件,或者在运行时以在编译/链接时确定的静态内存偏移量加载到其相应可执行文件的地址空间中。
优点:

  • 该应用程序可以确定其所有库都存在并且它们是正确的版本。这避免了依赖问题,通常被称为DLL Hell或更普遍的依赖地狱。
  • 静态链接还可以使应用程序包含在单个可执行文件中,从而简化了分发和安装。
  • 使用静态链接,足以包含目标可执行文件(或目标库)直接和间接引用的库部分。使用动态库时,将加载整个库,因为事先不知道应用程序将调用哪些功能。在实践中,这种优势是否显着取决于库的结构。

缺点:

  • 在静态链接中,可执行文件的大小变得比在动态链接中大,因为库代码存储在可执行文件中而不是存储在单独的文件中。

共享库文件(如.so)

wiki解释:Shared_libraries .so文件是什么

共享库或共享库是旨在由可执行文件和其他共享库文件共享的文件。程序使用的模块是在加载时或运行时从各个共享对象加载到内存中的,而不是由链接器在为该程序创建单个整体可执行文件时复制的。共享库可以在编译时静态链接,这意味着在创建可执行文件时,会解析对库模块的引用,并为模块分配内存。但是,共享库的链接通常被推迟,直到它们被加载为止。