C++学习笔记 18 静态链接、动态链接
关于包管理
-
我讨厌包管理,我讨厌链接到其他代码仓库之类的东西。我理想的项目设置是:如果你 check out 我的github repository, 你应该在repository中有你想要的所有东西,以便能直接编译和运行。不需要考虑包管理,去下载其他需要的库。
-
去glfw官网下载glfw-3.4.bin.WIN64.zip (https://www.glfw.org/download.html)
-
在当前项目下创建 Dependencies\GLFW
-
将解压缩的glfw-3.4.bin.WIN32.zip中 include 和 lib-vc2015 目录 copy到 Dependencies\GLFW目录下
-
设置项目 Additional Include Directories 属性:${SolutionDir}Dependencies\GLFW\include
#include<xxx.h> or include "xxx.h"
实际上没有什么区别。如果是引号的话,会先检查相对路径,如果没有找打任何相对于这个文件的东西,也就是相对于Main.cpp文件,它就会去找编译器。它会去找编译器的相对路径。
- 如果这个源文件在visual studio中,如果GLFW.h在我的解决方案中的某个地方,也许是另外一个project中,但只要inside此solution中,那么就会用引号,
- 如果是一个完全的外部依赖,或者外部的库,不在visual studio中和我们实际解决方案一起编译,那么就用尖括号,来表示实际上是外部的。
在项目中以相对路径设置外部连接头文件:

设置链接的通用目录:

添加lib库:

运行第三方库方法
#include<iostream>
#include "GLFW/glfw3.h"
int main() {
int a = glfwInit();
std::cout << a << std::endl;
std::cin.get();
}
一、动态链接、静态链接
动态链接是链接发生在运行时;静态链接是发生在编译时,当你编译一个静态库的时候,将其链接到可执行文(.exe, .run ......),也就是应用程序;或者链接到一个动态库。这有点像,你取出那个静态库内容,然后你把这些内容放入到其他二进制数据中,他实际上在你动态库中或在你的可执行文件中。正因为如此,有很多可优化的空间。静态链接允许更多的优化发生,因为编译器、链接器可以看到更多的东西(从静态链接中),特别是链接器,可以看到更多。

浙公网安备 33010602011771号