为什么我们在Visual Studio 2013中引用C ++项目?

时间:2015-02-07 20:10:32

标签: c++ visual-studio visual-studio-2013

当我们打算使用引用项目中的方法时,为什么我们必须在Visual Studio 2013中引用项目?我很困惑,因为我们使用的是#include预处理程序指令,它正在复制&将我们打算使用的代码粘贴到同一个头文件中,该文件仍在实际使用它的方法之上/之前。

基本上,即使我在同一个解决方案文件中包含了所有项目,并且头文件正确地找到了对方(智能感知并不抱怨/正确的linting发生),我仍然得到链接器错误。但即使引用项目纯粹是关于解决链接器错误,如果intellisense可以 peek / 显示定义到我从单独项目导入的代码,那不是吗?意味着Visual Studio也知道我链接哪个项目?

必须有一个原因,我们#include并参考包含的项目,即使现在在VS 2013中。有人可以帮助解释原因吗?

3 个答案:

答案 0 :(得分:2)

  

“必须有一个原因,我们都#include并且即使现在在VS 2013中引用所包含的项目。有人可以帮助解释原因吗?”

包含头文件允许使用那里的声明(函数,类或结构)。但要获得一个完全可执行的程序,还有更多必要:

  1. 编译器需要知道从哪里获取#include'd头文件
  2. 来自不同项目的已编译源代码需要链接到最终工件
  3. 链接器需要知道从哪里获取链接库
  4. 如果您只有标题库,则至少2个点不相关,但Visual Studio仍需要项目参考来解析标题文件pathes。


    特别是对于Visual Studio,还有#import指令可用,这样可以更容易地链接到共享库(并将它们作为独立项目保留,从同一个解决方案中引入参考库)。

答案 1 :(得分:0)

不,链接器在计算上不可行地猜测您希望在任何给定时间链接到项目中的定义。它没有尝试这样做是件好事。

答案 2 :(得分:-2)

C / C ++编译过程包含两个步骤:

  • 将(.c / .cpp)源代码编译成lib(需要外部.h文件)
  • 将所有必需的lib文件链接到可执行文件中(需要自己编译的lib文件和外部lib文件。毕竟,外部.h文件只包含定义)