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

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

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

    我所知道的是有两种链接方式,一种是静态,一种是动态。 静态意思是把.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     Solana     3311 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 11:45 PVG 19:45 LAX 03:45 JFK 06:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86