Giter Club home page Giter Club logo

cpp's People

Contributors

ulivz avatar

Watchers

 avatar  avatar

cpp's Issues

静态链接库与动态链接库的区别

引入

首先,回顾一下程序编译的过程:

image

首先,我们按照常规逻辑新建一个 Clion 的 project,源码非常简单:

// main.cpp
#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

Tip:请不要用 gcc 来打包 cpp 😅.

结合 g++ 来运行一下:

g++ -c 的作用是将源文件编译成汇编文件,在链接之前,该文件不是可执行文件;

g++ ./main.cpp -o main # 告诉编译器编译源代码但不要执行链接,输出结果为对象`(*.o)`文件
du -h ./main.o                 # 8.0K

接着,我们将上述两个源码文件 (main.cpp, main.o) 编译链接成一个单一的可执行程序:

g++ ./main.cpp -o main
du -h ./main.o                  # 16K

静态链接库

之所以成为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。

静态库的特点:

  1. 静态库对函数库的链接是放在编译时期完成的。
  2. 程序在运行时与函数库再无瓜葛,移植方便。
  3. 浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。

这好像可以理解成 UMD 😅

动态链接库

动态库特点总结:

  1. 动态库把对一些库函数的链接载入推迟到程序运行的时期。
  2. 可以实现进程之间的资源共享。(因此动态库也称为共享库)
  3. 将一些程序升级变得简单。
  4. 甚至可以真正做到链接载入完全由程序员在程序代码中控制(显示调用)。

这好像可以理解成 CommonJS 或者 esmodule 😅(尽管 esmodule 是静态的,但 node 将支持 esmodule,使其运行时才会被载入)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.