编译指示并包括标题/库

时间:2009-10-08 10:45:08

标签: visual-c++

VS C ++ 2008

我正在处理DirectX教程。

在源代码中有这一行:

#pragma comment (lib, "d3d9.lib")

当我编译所有链接好的时候。

但是,我注释掉了这一行,并尝试在属性下包含标题和库,如下所示:

C/C++ - General
Additional include directories: "C:\Program Files\Microsoft DirectX SDK (August 2009)\Include"

Linker - General
Additional library directories: "C:\Program Files\Microsoft DirectX SDK (August 2009)\Lib\x64"
Linker - Input: d3d9.lib

但是,我收到了这个链接器错误:

1>main.obj : error LNK2019: unresolved external symbol _Direct3DCreate9@4 referenced in function _initD3D

但是,当我只使用pragma时,我没有收到任何链接器错误。只有当我尝试用上面的属性包含它们时才会这样。

使用pragma并使用适当的项目包含标题/库有什么真正的区别?

非常感谢,

2 个答案:

答案 0 :(得分:3)

首先,#pragma comment(lib)只是链接器配置

第二,SDK应该在路径中,所以不要设置额外的库目录(你可以用错误的版本覆盖它),只需将d3d9.lib添加到链接器的输入。

答案 1 :(得分:1)

据我所知,没有区别。 pragma lib只是告诉链接器按名称查找特定的库。

此外,由于未在编译指示中指定路径,因此链接器依赖于项目的当前lib路径。尝试不向链接器选项添加任何路径(默认情况下,DX SDK会添加安装到任何visual studio的路径,直接修改全局visual studio路径。请参阅工具/选项/项目和解决方案/ VC ++目录/显示库文件目录)

要检查的一些事项:

  • 你的确在构建x64
  • 您的路径确实指向DX SDK(如果您使用的是x64,则会安装到Program Files(x86))
  • 验证是否没有其他链接器警告