在msvc 2010中使用Octave

时间:2015-06-19 04:36:44

标签: c++ octave

我在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 \倍频3.6.4 \包括\倍频3.6.4 \倍频---&GT; Includ。 Dir。,
  2. C:\ SOFTWARE \倍频3.6.4 \包括---&GT; Includ。迪尔。
  3. C:\ SOFTWARE \倍频3.6.4 \ lib中---&GT;库。迪尔。
  4. C:\ Software \ Octave-3.6.4 \ lib \ octave \ 3.6.4 ---&gt; Lib Dir。
  5. 我还在Additional Inc Dir中添加了1和2!
  6. C:\ Software \ Octave-3.6.4 \ lib \ octave \ 3.6.4 ---&gt;附加Lib。 Dir in Linker。
  7. 首先,我得到了这个错误,它在程序文件中找不到math.h,而这个文件在我的程序文件(x86)中。所以,我将其更改为: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)
    

1 个答案:

答案 0 :(得分:0)

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

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

修改

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

修改

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

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

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

符号__imp_??1octave_value@@QAE@XZ的名称表示它应该在DLL中。但是既然你遇到了问题,你也可能想要搜索LIB。 您可以使用dumpbin /symbols检测LIB实施。在这种情况下,您必须直接添加LIB。再次使用Build Output验证它。

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

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