• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

HowdoIcreateasharedlibraryinMATLAB?

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

    从mathworks的网站上面看到一篇tech-note,照着写了一下,可以通过,但是还有诸多其他问题。
example:
    1.  编写一个简单的M 文件 function,保存为 foo.m,此function如下:
        function  y=foo(x)
        y = x+1;

   2. 利用MATLAB 编译器将foo.m编译成 c代码,以及 C 共享库文件:
        
          >> mcc -t -L C -W lib:foolib -T link:lib foo.m libmmfile.mlib
   
  说明:
        -t 告诉MATLAB编译器将M代码翻译成目标代码;
        -L 指明需要采用的目标语言,这里可以选择 C, CPP等;
        -W 告诉matlab编译器采用lib:后面指定的名字建立库文件包;
        -T 告诉编译器采用的平台与目的,在这里我们想生成可以我    们的应用程序中共享的库文件(也就是说,PC机器上的DLL);
        指定的libmmfile.mlib告诉matlab编译器将Matlab的数学库预编译到共享库中(如果需要的话)
        -g 使得产生的DLL可以在MSVC(或者你的IDE)中编译

         通过这一步,可以产生如下的文件:
         foo.c
         foo.h
         foolib.c
         foolib.h
         foolib.exports
         foolib.dll
         foolib.exp
         foolib.lib
         foolib.mlib

    3.  打开VC 6.0 IDE, 新建一个 Win32 Console Application 类型的工程:Test ,Platforms选择 Win32,定位好自己的文件位置。单击OK
在第二步中选择 空的工程,单击Finish;
    
     4. vc的一些设置:(这里我采用的跟mathworks的technote介绍的略有不同)
       (1),在项目建立后,设置环境。
Tool->options->Diretories 页面下Show directories for
先选择Include Files,输入路径:D:\PROGRAMS\MATLAB6P5P1\EXTERN\INCLUDE
在选择Library Files,输入路径:D:\PROGRAMS\MATLAB6P5P1\EXTERN\LIB\WIN32\MICROSOFT\MSVC60
(我的matlab根目录是 D:\PROGRAMS\MATLAB6P5P1\ ;这里的设置对不同工程只需要一次)
     (2)打开Project->Settings->Link页面,在Object/Library modules
中加入libmatlb.lib libmmfile.lib libmx.lib 。(这里对每个工程都要设置,并且根据需要选不同的库)

    5. 将刚才生成的foolib.h,foolib.lib, foolib.dll,foolib.mlib拷贝到工程目录下;(不完全清楚是否需要foolib.mlib,我这里不要也行)
    
    6. 打开Project---->Add to project---->Files... ,将刚刚拷贝过来的foolib.lib加入到工程中;

    7.  选中vc的workspace的 File View标签,双击 test files展开,选择  Project------>Add to project ------>New... ,为工程增加一个名为 foowrap.c的 c++Source 文件;

     8.  在foowrap.c中加入下面的代码:


#include "foolib.h"
#include "matlab.h"
#include <stdio.h>

void main(void)
{
mxArray *x_ptr;
mxArray *y_ptr;
double *y;
double ret;

              x_ptr=mxCreateDoubleScalar(4);

foolibInitialize();  // 初始化

y_ptr=mlfFoo(x_ptr);

foolibTerminate();  //终止

y=mxGetPr(y_ptr);

ret=*y;

printf("The output of foo is %f\n",ret);

mxDestroyArray(x_ptr);  // 释放 mxArray
mxDestroyArray(y_ptr);

}

         9. Ok, 编译,运行,可以了吧? 看到dos窗口输出的:
                 The output of foo is 5.000000 了吧?是不是很兴奋啊?
      
         不过,这个程序是不是太死板了点儿?
       
         我也这样想的,然后我就想通过输出给出输出,可是不知道为什么,我先用 scanf从外界获取输入后,想通过memcpy将获取的值赋值给x_ptr,却怎么也不成功~

           sigh,下次再试试了~
        
        有没有谁知道的指点指点呀?

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
DelphiBLE控件发布时间:2022-07-18
下一篇:
DELPHI下的SOCK编程(转)发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap