1

我用两个控制台应用程序项目制作了一个 Microsoft 视觉解决方案。我可以在一个项目中使用 Eigen 库,只需在属性中声明它,如下所示:

$(ProjectDir)特征\特征3;

我可以使用像“Eigen::Vector3d”等库结构没问题。现在,当我尝试将仅标头库复制到第二个项目文件夹中并尝试为第二个项目文件夹设置相同的属性,并使用该结构时,我会遇到编译错误。

然后,当我不将 Eigen 文件夹复制到第二个文件夹中并简单地尝试从第二个文件夹中引用第一个文件夹时,我会得到另一组编译时错误。

$(SolutionDir)someproject1\Eigen\eigen3;

第二种情况的错误是这样的:

c:\users\alam syed\documents\someproject2.h(11): error C2653: 'Eigen': is not a class or namespace name

c:\users\alam syed\documents\someproject2.h(11): error C2065: 'Vector3f': undeclared identifier

c:\users\alam syed\documents\someproject2.h(11): error C2923: 'std::vector': 'Vector3f' 不是参数 '_Ty' 的有效模板类型参数

c:\users\alam syed\documents\someproject2.h(11): 错误 C2903: 'allocator': 符号既不是类模板也不是函数模板

c:\users\alam syed\documents\someproject2.h(11): error C3203: 'allocator': unspecialized class template can't be used as a template argument for template parameter '_Alloc', 应为真实类型

为什么在同一个解决方案中有两个项目试图在他们的项目文件夹中独立拥有自己的库是不行的?此外,为什么我不能将 Eigen 文件夹从一个引用到第一个?最后,我们如何绕过这个怪癖/设计问题?

4

1 回答 1

1

我刚刚对此进行了测试,并且可以在一个解决方案中使用。

  • 创建空解决方案
  • 添加了两个控制台项目
  • 将特征标头从 zip 复制到两个项目中的每一个中
  • 将它们重命名为eigen1第一个项目文件夹和eigen2第二个项目文件夹
  • 使用 eigen docs 中的教程代码在每个项目中创建了两个 .cpp 文件
  • 在第一个项目和第二个项目中设置($ProjectDir)eigen1为“附加包含目录” ($ProjectDir)eigen2
  • 检查构建的调试二进制文件是否在嵌入式调试信息中引用了正确的特征标头

如果您不重命名特征文件夹,这甚至可以工作。

我只能想到两个你想要这样做而不是使用common 目录方法的原因:

  • 每个项目都使用不同版本的库,或者您希望以后有此选项的灵活性
  • 您想使用自定义版本的 eigen(和/或其他库)应用您自己的补丁
于 2018-09-19T11:59:29.357 回答