【问题标题】:Compiling Eigen C++ QT编译 Eigen C++ QT
【发布时间】:2016-03-27 05:22:23
【问题描述】:

Eigen 位于文件中 C:\Users\jherb_000\Downloads\eigen-eigen-07105f7124f9

我想包括你刚刚使用的特征

`#include "C:\Users\jherb_000\Downloads\eigen-eigen-07105f7124f9\Eigen/Dense" `

但它没有编译。我知道它可以工作,因为我以前做过,并且 eigen 网站没有解释如何做到这一点,除非你使用像 g++ 这样的特定程序。

【问题讨论】:

  • 您遇到什么错误?请提供更多上下文

标签: c++ qt eigen


【解决方案1】:

由于您通过标签暗示您正在使用 qt-creator,因此您的问题归结为“如何在 qt-creator 中添加包含目录?”有herehere 和其他人的答案。需要注意的一点是,您应该添加的路径是C:\Users\jherb_000\Downloads\eigen-eigen-07105f7124f9

当您在特定目录中包含特定文件时会发生什么,如果该文件没有#include 任何其他文件(好的,不在包含路径中的其他文件)都可以正常工作。但是如果是这样,(并且 Eigen 文件包括 Eigen 项目中的其他文件),那么编译器不知道在哪里搜索它们。这就是为什么你必须明确告诉编译器在哪些目录中查找包含的文件。

【讨论】:

  • 也许 OP 正在调用 C:\Users\jherb_000\Downloads\eigen-eigen-07105f7124f9 一个文件(文件夹),而它实际上是一个目录??
  • @ruffles 不,Eigen 每次都被解压缩到一个具有不同奇怪扩展名的目录中。下载并试用。
  • 好的,所以我从http://bitbucket.org/eigen/eigen/get/3.2.8.tar.bz2 下载了.tar.gz 并解压缩到:/home/john/downloads/eigen-eigen-07105f7124f9/。 @Avi 我不确定扩展名会如何变化,除非他在每次尝试构建时都关注INSTALL 文件并使用cmakemake
  • @ruffles Extension 是一个糟糕的词选择。无论如何,我指的是 Eigen 的版本。下载 3.2.7,你会明白我的意思。
  • 我尝试的第一个是3.2.8。解压后 Eigen 3.2.7 的目录变成了/home/john/downloads/eigen-eigen-b30b87236a1b/,所以是的,每个版本似乎都以不同的代码结尾。 @OP @Jack 应该将文件下载到他的机器上,复制目录位置并使用它
【解决方案2】:

很容易。假设您有一个dependencies 目录,并且在里面有eigen 目录。在你的 .pro 文件中,你可以将你的依赖路径添加到你的 INCLUDEPATH:

INCLUDEPATH += ../dependencies/ # or wherever that path is (relative to your .pro file)

然后,要包含 Dense 模块,您可以:

#include <eigen/Dense>

其中eigen 指的是您的dependencies 文件夹中的文件夹eigen。您的设置功能可能有许多变化,但您明白了。

【讨论】:

    【解决方案3】:

    好的,那么你需要做的是:

    1. C:\Users\jherb_000\Downloads\eigen-eigen-07105f7124f9\Eigen 目录及其所有内容复制到您将所有第三方库文件保存在计算机上的任何位置。 (您可能不想将这些文件保存在您的Downloads 文件夹中)。例如,假设这个目录被复制到C:\jacks_code\Eigen。那么,

    2. 将此新目录添加到 Qt-creator 的目录列表中以进行搜索(请参阅 Aki 的答案以获取链接):

    3. 在每个源文件中,要包含 Eigen 模板,请使用预处理器指令:

      #include &lt;Dense&gt;

    编译器将使用您告诉它的目录,将文件取消引用到C:\jacks_code\Eigen\Dense(完整的文件名)。这有点令人困惑,因为 根 Eigen 文件夹中的文件没有 .h.c.cpp.hpp 扩展名。

    希望对您有所帮助。您还可以阅读解压缩包底部的INSTALL 文件。

    【讨论】:

    • 如何找到要使用的头文件
    • 特征文档/帮助库/自述文件应该为您提供要包含在程序中的文件列表。获得完整的文件路径和文件名后,您可以通过这种方式包含它。请记住,文件名中的空格可能需要用“\”字符分隔。例如:#include "C:\Users\jherb_000\Downloads\eigen-eigen-07105f7124f9\eigenvector.h" 以在该确切目录中包含“eigenvector.h”。您可以浏览该目录并查看其中有哪些文件。
    • 那么您是说实际特征文件的文件名是您在 Eigen/Dense 之后需要的吗?
    • "quotations" 中的整个字符串必须是 header 文件的完整且准确的路径和文件名(很可能以 .h) 例如,要在目录“C:/john/files/”中包含一个名为“eigenvector.h”的文件,您的确切命令将是#include "C:/john/files/eigenvector.h"
    • 那么你需要在最后包含 Eigen/Dense 吗?
    猜你喜欢
    • 2015-05-31
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    相关资源
    最近更新 更多