英特尔 TBB 集成问题 - Google 测试项目中的 VS2013 编译错误
Intel TBB integration issue - VS2013 Compilation error in Google Test project
我有一个具有这种结构的 VS2013 解决方案:
- gtestalgo 项目,在库上有 gtests algo.lib
- algo 项目,编译为 dll 并将 .lib 导出到 $(SolutionDir)lib/Release_x64 文件夹
gtestalgo 项目对 algo 项目存在构建依赖性。
algo 项目单独构建成功。算法项目包括英特尔 TBB:Linker 属性包含附加库目录“$(tbb_path)\lib\intel64$(tbb_subdir)
”和输入“tbb.lib
”。
gtestalgo 项目无法编译。错误都与 TBB 有关。更准确地说,错误是指算法项目中无法识别 TBB 的文件,例如 "TBB is not a class or namespace name"。 gtestalgo 项目已将 ../algo
作为附加包含目录,其中 ../algo
包含算法项目的所有源文件和头文件。 gtestalgo 项目链接库 algo.lib,并且 Linker 其他库目录和输入已正确设置。 gtestalgo 项目中的源代码包括来自算法项目的几个头文件:#include "algo_main.h"
,等等...
我试图 Link TBB 到 gtestalgo 项目(具有与算法项目相同的 Linker 属性),我也试图删除这个 Link。在这两种情况下,编译错误是相同的。
为什么algo项目可以编译,而gtestalgo项目没有
编译,抱怨 TBB 在来源 from algo 中无法识别
项目 ?
我是否应该 Link TBB 库到 gtestalgo 项目,当没有代码时
gtestalgo 项目源使用 TBB(algo 项目只实现了
待定 API) ?
知道这里会出什么问题吗?
Sources in gtestalgo project include several header files from algo project: #include "algo_main.h"
, etc...
这表明如果 Algo header 文件包含 TBB,将此类 Algo header 包含到 GTestAlgo 项目中会带来对 TBB 的依赖。
由于 Algo 项目编译良好,我得出结论,它正确设置了包含目录,因此可以找到 TBB headers。
但是我在你的描述中没有看到GTestAlgo项目中的Include目录是如何设置的。将它们设置为与 TBB 位置相同的方式,它可能会编译正常。
You can include it directly with something like #include "../algo/stdafx.h" (in gtestalgo/stdafx.h if there is one).
这足以解决问题。算法项目中预编译的 stdafx header 中的某些包含对 gtestalgo 项目不可见。
我有一个具有这种结构的 VS2013 解决方案:
- gtestalgo 项目,在库上有 gtests algo.lib
- algo 项目,编译为 dll 并将 .lib 导出到 $(SolutionDir)lib/Release_x64 文件夹
gtestalgo 项目对 algo 项目存在构建依赖性。
algo 项目单独构建成功。算法项目包括英特尔 TBB:Linker 属性包含附加库目录“$(tbb_path)\lib\intel64$(tbb_subdir)
”和输入“tbb.lib
”。
gtestalgo 项目无法编译。错误都与 TBB 有关。更准确地说,错误是指算法项目中无法识别 TBB 的文件,例如 "TBB is not a class or namespace name"。 gtestalgo 项目已将 ../algo
作为附加包含目录,其中 ../algo
包含算法项目的所有源文件和头文件。 gtestalgo 项目链接库 algo.lib,并且 Linker 其他库目录和输入已正确设置。 gtestalgo 项目中的源代码包括来自算法项目的几个头文件:#include "algo_main.h"
,等等...
我试图 Link TBB 到 gtestalgo 项目(具有与算法项目相同的 Linker 属性),我也试图删除这个 Link。在这两种情况下,编译错误是相同的。
为什么algo项目可以编译,而gtestalgo项目没有 编译,抱怨 TBB 在来源 from algo 中无法识别 项目 ?
我是否应该 Link TBB 库到 gtestalgo 项目,当没有代码时 gtestalgo 项目源使用 TBB(algo 项目只实现了 待定 API) ?
知道这里会出什么问题吗?
Sources in gtestalgo project include several header files from algo project:
#include "algo_main.h"
, etc...
这表明如果 Algo header 文件包含 TBB,将此类 Algo header 包含到 GTestAlgo 项目中会带来对 TBB 的依赖。
由于 Algo 项目编译良好,我得出结论,它正确设置了包含目录,因此可以找到 TBB headers。
但是我在你的描述中没有看到GTestAlgo项目中的Include目录是如何设置的。将它们设置为与 TBB 位置相同的方式,它可能会编译正常。
You can include it directly with something like #include "../algo/stdafx.h" (in gtestalgo/stdafx.h if there is one).
这足以解决问题。算法项目中预编译的 stdafx header 中的某些包含对 gtestalgo 项目不可见。