我在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;
}
请注意,我也将这些链接添加到我的项目中:
首先,我得到了这个错误,它在程序文件中找不到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)
答案 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邮件列表论坛或其他任何地方询问。