【问题标题】:Use Octave in msvc 2010在 msvc 2010 中使用 Octave
【发布时间】:2015-06-19 04:36:43
【问题描述】:

我在 MSVC 2010 中使用 Octave。首先我在 link 下载了 Octave 最新版本。安装后,我尝试运行这个简单的代码:

#include <iostream>
#include<octave-3.6.4\octave\oct.h>
#include<octave-3.6.4\octave\config.h>
#include<octave-3.6.4\octave\octave.h>

using namespace std;


int main (void)
{
  std::cout << "Hello Octave world!\n";   

  system("PAUSE");
  return 0;
  }

请注意,我也将这些链接添加到我的项目中:

  1. C:\Software\Octave-3.6.4\include\octave-3.6.4\octave--->包括。目录,
  2. C:\Software\Octave-3.6.4\include--->包含。目录
  3. C:\Software\Octave-3.6.4\lib--->Lib.目录
  4. C:\Software\Octave-3.6.4\lib\octave\3.6.4--->Lib 目录
  5. 我还在 Additional Inc 目录中添加了 1 和 2!
  6. C:\Software\Octave-3.6.4\lib\octave\3.6.4--->附加库。链接器中的目录。

首先,我收到此错误,即当此文件位于我的 Program Files (x86) 中时,它无法在 Program Files 中找到 math.h。因此,我将其更改为:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\math.h,它解决了这个错误。但是,现在我收到此错误:

error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall octave_value::~octave_value(void)" (__imp_??1octave_value@@QAE@XZ) referenced in function "public: void * __thiscall octave_value::`vector deleting destructor'(unsigned int)" (??_Eoctave_value@@QAEPAXI@Z)

【问题讨论】:

  • system("PAUSE"); 不是运行程序所必需的。您使用“Debug”/“Start without Debugging”运行程序来摆脱那条可笑的线。
  • 又是同样的错误!
  • 嗯,这是对细节的评论,而不是答案。它确实有望成为答案。

标签: c++ octave


【解决方案1】:

将库路径添加到项目中是不够的。

您必须将库名称(包括.lib)添加到链接器/输入选项卡中的“附加依赖项”。

编辑

要验证搜索了哪些库,您可以启用链接器/常规/显示进度选项。然后,您可以在 Build Output 中看到实际用于符号搜索的库。

编辑

您的示例代码未显示octave_value 实例数组的任何实例。因此,您需要使用您显示的代码链接任何库,这有点令人惊讶。但无论如何,您都希望解决这些外部问题。

如果没有其他资源(手动、...),您应该检测octave_value 类的实现位置。这可以是静态库或 DLL。

您可以在 DLL 上使用 dumpbin /exports 检测 DLL 实现。在这种情况下,您需要相应的导入库。 LIB 应该与 DLL 具有相同的基本名称。验证您是否已添加该依赖项以及链接器如何在此库中搜索符号。

符号名称__imp_??1octave_value@@QAE@XZ 表明它应该在DLL 中。但既然你有问题,你可能也想搜索 LIB。 您可以使用dumpbin /symbols 检测 LIB 实现。在这种情况下,您必须直接添加 LIB。再次使用构建输出验证它。

dumpbin 输出可能非常冗长。您应该使用findstr 来限制输出或将输出重定向到文件并使用您选择的编辑器搜索符号。

搜索ocatave_value。如果您发现构造函数和析构函数的装饰不同,您可能错过了设置选项。预处理器目录可用于定义库的使用方式。例如。如果你发现octave_value::octave_value 没有__imp_ 前缀,那么尽管类是在静态库中实现的,但你已经意外地编译为DLL 版本。在这种情况下,请阅读手册并在 octave 邮件列表论坛或其他地方提问。

【讨论】:

  • 我添加了所有的库并再次得到同样的错误! (octave.lib octinterp.lib cruft.lib blas.lib dirent.lib fftw3.lib fftw3f.lib gfortran-msvc.lib gfortran-msvc-static.lib hdf5.lib lapack.lib mingwcompat.lib msvcmath.lib ncurses.lib readline .lib z.lib)
  • 不幸的是,基于此输出,我找不到任何有用的信息
  • 可能你想试​​试wiki.octave.org/Octave_for_Microsoft_Windows#Alternative中提到的预建版本
  • 我以前做过。问题是没有关于如何在 C++ 中使用 Octave 的手册。
  • @Sam 肯定有。这是octave manual 上的一个部分
猜你喜欢
  • 2011-09-20
  • 1970-01-01
  • 2016-11-21
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多