大家在编译程序的时候一定会遇到这个错误吧,我来解释一下这个错误出现的原因。
从源代码到程序需要经历预处理,编译,汇编,连接四个过程,其中预处理就是把带有预处理指令的代码变为不带预处理指令的代码,比如一些宏变量的替换,不同操作系统下需要编译的代码不同。
编译是将高级语言转化为汇编的过程。这也是最复杂的过程,里面牵涉一堆东西,这里不做展开。但是这一步骤执行完成以后汇编代码里面会出现大量的地址分配操作和跳转操作,这是引用别的头文件中的函数带来的问题。而且这一步骤还会根据不同的源文件分别对应生成相应源文件的汇编代码,这才是重点。
汇编是根据不同的处理器的对照表,将汇编代码转化为机器可执行代码的过程。
连接是将上一步翻译出来的机器码根据地址信息连接成一个可执行文件的过程。
而无法解析的外部符号出现的错误,一般是因为你在代码中添加了头文件的代码(.h),但是没有添加相应的源文件(.cpp),对于没有源文件,只有头文件的情况,那就是没有添加相应的静态编译文件,windows下一般是obj文件。
但是注意,使用了obj文件,一定要把对应的dll文件(动态链接库)文件放到可执行文件可以访问到的路径下,例如已经添加了环境变量的文件夹,或者同一文件夹内。否则程序会出现无法运行的问题。