complier负责将每个源码文件编译成OBJ
linker负责将每个OBJ\LIB之类的进行链接
比如你需要EXE还是DLL就是链接器的一个选项,对应于生成的二进制文件
中的一个WORD,Windows装载器根据这个字来判断。
Link和Complier里面的东西太多,需要你精通PE格式、Windows底层的一些东西。不然看不懂。

解决方案 »

  1.   

    为什么程序include 头文件后,linker知道应该链接那些dll文件,这在exe文件中如何标记调用的函数是库函数还是自己编写的函数?
      

  2.   

    在exe文件中如何标记调用的函数是库函数还是自己编写的函数? 为什么要区别呢?
      

  3.   

    如果是静态链接库函数的话,和链接自己的函数没有什么区别,执行代码都在EXE文件里面。
    如果是动态链接,EXE或者DLL有一个导入表,提供了每个动态链接的函数的所在位置(包括DLL文件名和函数在DLL中的RVA).
    这些信息是链接时LIB提供给链接器的.
      

  4.   

    .H头文件仅仅提供了一个声明,让Complier顺利通过而已
    链接器才不管也不知道你用了哪些头文件.
      

  5.   

    链接的时候它到标准的LIB里面去找(一般环境默认是Windows的三大块和C/C++
    Runtime),到所有生成的.OBJ里面去找,找不到就报错.
    这时你就需要在链接的时候指示它,也就是所谓的LIB的作用.