免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2748 | 回复: 5

[C++] c++与MATLAB混合编程出现error LNK1104 [复制链接]

论坛徽章:
0
发表于 2016-05-31 22:09 |显示全部楼层
使用书上的例子:
#include "stdafx.h"
#include "engine.h"
#include "TestMATLABEngine.h"
#include "TestMATLABEngineDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialog
{
public:
        CAboutDlg();

// 对话框数据
        enum { IDD = IDD_ABOUTBOX };

        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
        DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg:oDataExchange(CDataExchange* pDX)
{
        CDialog:oDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CTestMATLABEngineDlg 对话框




CTestMATLABEngineDlg::CTestMATLABEngineDlg(CWnd* pParent /*=NULL*/)
        : CDialog(CTestMATLABEngineDlg::IDD, pParent)
{
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTestMATLABEngineDlg:oDataExchange(CDataExchange* pDX)
{
        CDialog:oDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CTestMATLABEngineDlg, CDialog)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        //}}AFX_MSG_MAP
        ON_BN_CLICKED(IDC_BTNPLOTSIN, &CTestMATLABEngineDlg::OnBnClickedBtnplotsin)
        ON_BN_CLICKED(IDC_BTNPLOTCOS, &CTestMATLABEngineDlg::OnBnClickedBtnplotcos)
END_MESSAGE_MAP()


// CTestMATLABEngineDlg 消息处理程序

BOOL CTestMATLABEngineDlg::OnInitDialog()
{
        CDialog::OnInitDialog();

        // 将“关于...”菜单项添加到系统菜单中。

        // IDM_ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);

        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
                CString strAboutMenu;
                strAboutMenu.LoadString(IDS_ABOUTBOX);
                if (!strAboutMenu.IsEmpty())
                {
                        pSysMenu->AppendMenu(MF_SEPARATOR);
                        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
                }
        }

        // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);                        // 设置大图标
        SetIcon(m_hIcon, FALSE);                // 设置小图标

        // TODO: 在此添加额外的初始化代码

        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CTestMATLABEngineDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
                CAboutDlg dlgAbout;
                dlgAbout.DoModal();
        }
        else
        {
                CDialog::OnSysCommand(nID, lParam);
        }
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CTestMATLABEngineDlg::OnPaint()
{
        if (IsIconic())
        {
                CPaintDC dc(this); // 用于绘制的设备上下文

                SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

                // 使图标在工作矩形中居中
                int cxIcon = GetSystemMetrics(SM_CXICON);
                int cyIcon = GetSystemMetrics(SM_CYICON);
                CRect rect;
                GetClientRect(&rect);
                int x = (rect.Width() - cxIcon + 1) / 2;
                int y = (rect.Height() - cyIcon + 1) / 2;

                // 绘制图标
                dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
                CDialog::OnPaint();
        }
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR CTestMATLABEngineDlg::OnQueryDragIcon()
{
        return static_cast<HCURSOR>(m_hIcon);
}


void CTestMATLABEngineDlg::OnBnClickedBtnplotsin()
{
        // TODO: Add your control notification handler code here
        Engine *ep;
        if(!(ep=engOpen(NULL)))
                ::MessageBox(NULL,"不能启动MATLAB engine","VC++调用matlab engine示例程序",MB_OK);
    engEvalString(ep,"x=0:0.1:2*pi;y=sin(x);";
    engEvalString(ep,"plot(x,y);";
        engEvalString(ep,"subplot(2,1,1);plot(x,y);";
        engEvalString(ep,"title('画正弦线');";
//  engEvalString(ep,"x=0:0.1:2*pi;y=cos(x);";
//  engEvalString(ep,"subplot(2,1,2);plot(x,y);";
//        engEvalString(ep,"title('画余弦线');";
        ::MessageBox(NULL,"按下任意键继续","VC++调用matlab引擎",MB_OK);
        engClose(ep);       
}

void CTestMATLABEngineDlg::OnBnClickedBtnplotcos()
{
        // TODO: Add your control notification handler code here
        Engine *ep;
        if(!(ep=engOpen(NULL)))
                ::MessageBox(NULL,"不能启动MATLAB engine","VC++调用matlab engine示例程序",MB_OK);
    engEvalString(ep,"x=0:0.1:2*pi;y=cos(x);";
    engEvalString(ep,"plot(x,y);";
        engEvalString(ep,"title('画余弦线');";
        ::MessageBox(NULL,"按下任意键继续","VC++调用matlab引擎",MB_OK);       
}

论坛徽章:
0
发表于 2016-05-31 22:10 |显示全部楼层
1>------ 已启动生成: 项目: TestMATLABEngine, 配置: Debug Win32 ------
1>正在编译...
1>stdafx.cpp
1>正在编译...
1>TestMATLABEngineDlg.cpp
1>TestMATLABEngine.cpp
1>正在生成代码...
1>正在链接...
1>LINK : fatal error LNK1104: 无法打开文件“libeng.lib;”
1>生成日志保存在“file://d:\yhs\MAT\TestMATLABEngine\TestMATLABEngine\Debug\BuildLog.htm”
1>TestMATLABEngine - 1 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========

运行结果

论坛徽章:
0
发表于 2016-05-31 22:14 |显示全部楼层
从其他地方的得了解到的解决方法

方法一:操作 项目》属性》链接器》常规》附加库目录》,然后把libeng.lib 库文件所在的目录(或者绝对路径)添加进去。
方法二:直接把libengine.lib文件拷贝到项目的代码文件夹或者可执行程序文件夹下。
方法三:在stdafx.h加入#pragma comment(linker,"/NODEFAULTLIB:libeng.lib")

都无法解决,求助,在线等

论坛徽章:
0
发表于 2016-05-31 22:33 |显示全部楼层
求助。。。。

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
发表于 2016-06-01 08:58 |显示全部楼层
这个不就是找不到“库”吗?

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
发表于 2016-06-01 09:59 |显示全部楼层
是不是没包含头文件?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP