在 msvc 2010 中使用 Octave

Use Octave in msvc 2010

本文关键字:Octave msvc 2010      更新时间:2023-10-16

我在MSVC 2010中使用Octave。首先,我在此链接下载了Octave最新版本。安装后,我尝试运行以下简单代码:

#include <iostream>
#include<octave-3.6.4octaveoct.h>
#include<octave-3.6.4octaveconfig.h>
#include<octave-3.6.4octaveoctave.h>
using namespace std;

int main (void)
{
  std::cout << "Hello Octave world!n";   
  system("PAUSE");
  return 0;
  }

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

    C:\软件\八度-3.6.4\包括\八
  1. 度-3.6.4\八度--->包括目录,
  2. C:\Software\Octave-3.6.4\include--->包括目录
  3. C:\Software\Octave-3.6.4\lib--->Lib. Dir.
  4. C:\Software\Octave-3.6.4\lib\octave\3.6.4--->Lib Dir.
  5. 我还在附加公司目录中添加了 1 和 2!!
  6. C:\Software\Octave-3.6.4\lib\octave\3.6.4--->附加 lib. dir.

首先,我收到此错误,当此文件在我的程序文件(x86)中时,它无法在程序文件中找到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)

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

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

编辑

要验证搜索了哪个库,您可以启用链接器/常规/显示进度选项。然后,您可以在构建输出中看到符号搜索中实际使用的库。

编辑

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

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

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

__imp_??1octave_value@@QAE@XZ符号的名称指示它应位于 DLL 中。但是由于您有问题,您可能也想搜索 LIB。您可以使用 dumpbin /symbols 检测 LIB 实现。在这种情况下,您必须直接添加 LIB。再次使用生成输出进行验证。

垃圾箱输出可能会非常冗长。应使用findstr来限制输出或将输出重定向到文件,然后使用所选编辑器搜索符号。

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