V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
VDimos
V2EX  ›  程序员

关于编译、链接的一些问题

  •  
  •   VDimos · 2019-07-31 10:44:17 +08:00 · 2011 次点击
    这是一个创建于 1976 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我所知道的是有两种链接方式,一种是静态,一种是动态。 静态意思是把.a 文件打包到最后的可执行文件里,动态.so 是独立存在的,就像插件一样,可执行文件要的时候就调用。 那平时我们用别人的源代码,直接引用进自己的应用,然后再编译,这种过程还是像静态链接一样,最后产生的可执行文件实际上包含了我引用的源代码,那是不是也叫静态链接? 另外,静态链接在编译时需要手动定义头文件去知道链接的函数的调用方式,动态链接我看了下,是不需要吗? 最后,各位大佬,这方面的内容在哪里能够找到最为系统的讲解,有什么书吗?

    11 条回复    2019-07-31 21:07:26 +08:00
    yianing
        1
    yianing  
       2019-07-31 10:57:03 +08:00
    程序员的自我修养
    andj4cn
        2
    andj4cn  
       2019-07-31 10:57:37 +08:00
    静态链接和动态链接都是针对库的。分别叫静态链接库和动态链接库。
    1. 二者使用都必须提供头文件。
    2. 静态库比较大,是全打包,很多使用不到的库放进去了,会导致应用程序太大。
    3. 动态库是小的单元,可以让应用程序按需加载,应用程序不会很大。

    我当时在配 OpenGL 开发环境的时候找了一些文章来看,忘了哪些文章了,可以从简单的 gcc 编译 cpp 代码开始。
    VDimos
        3
    VDimos  
    OP
       2019-07-31 11:09:20 +08:00 via Android
    @yianing 谢谢大佬
    VDimos
        4
    VDimos  
    OP
       2019-07-31 11:10:17 +08:00 via Android
    @andj4cn 我在看 rust 的编译,因为文档各方面都不是那么好找,所以很迷糊
    darknoll
        5
    darknoll  
       2019-07-31 11:16:59 +08:00
    正式项目一般用 dll/so
    darknoll
        6
    darknoll  
       2019-07-31 11:20:47 +08:00
    @andj4cn
    可以没有头文件,调用的地方申明函数原型。dll 的话,连导入库都不需要。
    Doragd
        7
    Doragd  
       2019-07-31 11:25:43 +08:00
    可以看《计算机系统基础》袁春风,在中国大学 mooc 上,有一章专门讲程序的链接,装载
    pagxir
        8
    pagxir  
       2019-07-31 11:30:48 +08:00 via Android
    调用方式跟连接形式无关,跟编译器生产的代码有关。
    season4675
        9
    season4675  
       2019-07-31 11:33:02 +08:00
    你需要买一本《程序员的自我修养——链接、装载与库》 方法告诉你了,就看你会不会去看了。 提醒下,你说的这些个问题不解决,你的工作没法进行下去……
    VDimos
        10
    VDimos  
    OP
       2019-07-31 14:14:27 +08:00 via Android
    @season4675 就感觉很奇怪,我的理解里要调用函数得写定义,可我看 rust 里的直接就可以像文件一样打开读取调用就行了
    agagega
        11
    agagega  
       2019-07-31 21:07:26 +08:00
    @VDimos 你需要知道头文件到底干了什么。函数声明说到底是给编译器看的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2728 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:02 · PVG 20:02 · LAX 04:02 · JFK 07:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.