首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

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

  •  
  •   VDimos · 128 天前 · 824 次点击
    这是一个创建于 128 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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