我所知道的是有两种链接方式,一种是静态,一种是动态。 静态意思是把.a 文件打包到最后的可执行文件里,动态.so 是独立存在的,就像插件一样,可执行文件要的时候就调用。 那平时我们用别人的源代码,直接引用进自己的应用,然后再编译,这种过程还是像静态链接一样,最后产生的可执行文件实际上包含了我引用的源代码,那是不是也叫静态链接? 另外,静态链接在编译时需要手动定义头文件去知道链接的函数的调用方式,动态链接我看了下,是不需要吗? 最后,各位大佬,这方面的内容在哪里能够找到最为系统的讲解,有什么书吗?
1
yianing 2019-07-31 10:57:03 +08:00
程序员的自我修养
|
2
andj4cn 2019-07-31 10:57:37 +08:00
静态链接和动态链接都是针对库的。分别叫静态链接库和动态链接库。
1. 二者使用都必须提供头文件。 2. 静态库比较大,是全打包,很多使用不到的库放进去了,会导致应用程序太大。 3. 动态库是小的单元,可以让应用程序按需加载,应用程序不会很大。 我当时在配 OpenGL 开发环境的时候找了一些文章来看,忘了哪些文章了,可以从简单的 gcc 编译 cpp 代码开始。 |
5
darknoll 2019-07-31 11:16:59 +08:00
正式项目一般用 dll/so
|
7
Doragd 2019-07-31 11:25:43 +08:00
可以看《计算机系统基础》袁春风,在中国大学 mooc 上,有一章专门讲程序的链接,装载
|
8
pagxir 2019-07-31 11:30:48 +08:00 via Android
调用方式跟连接形式无关,跟编译器生产的代码有关。
|
9
season4675 2019-07-31 11:33:02 +08:00
你需要买一本《程序员的自我修养——链接、装载与库》 方法告诉你了,就看你会不会去看了。 提醒下,你说的这些个问题不解决,你的工作没法进行下去……
|
10
VDimos OP @season4675 就感觉很奇怪,我的理解里要调用函数得写定义,可我看 rust 里的直接就可以像文件一样打开读取调用就行了
|