zoukankan      html  css  js  c++  java
  • Windows10 + Matlab2013 mex C++ 调用gsl

    最前面啰嗦一句,matlab默认编译c的编译器有点奇怪,会出现引用.h却找不到相应函数的问题,解决方法是把.c全部都改成.cpp!血的教训!

    下面进入正题~~

    由于Matlab调用的C函数中引用了GSL,编译了半天,改来改去,每次都提示LNK error找不到gsl:

    em.obj : error LNK2019: 无法解析的外部符号 "void __cdecl readData(char *,struct Dataset *)" (?readData@@YAXPEADPEAUDataset@@@Z),该符号在函数 main 中被引用 ...

    经过长时间的google search,终于有一哥们儿的回答让我眼前一亮!!

    http://www.mathworks.com/matlabcentral/newsreader/view_thread/168083

    特附上网址一枚~~~

    贴上这个让我感动得要掉眼泪的回复:

    所以下面的步骤就是:

    1.编译64位的gsl,可以参考http://blog.sina.com.cn/s/blog_6e0693f70100u2ve.html 我是偷了懒,直接在csdn上找到了编译好的现成的gsl-64

    2.改mexopt对应的INCLUDE和LIB (这一步其实可以省略,亲测并不影响),也就是上一篇博客中提到的设置INCLUDE和LIB的方法,可以直接通过mex的参数来指定,见3

    3.编辑编译命令,我最后的编译命令是:

     mex em_mex.cpp em.cpp data.cpp prob_functions.cpp -LD:sdksgsl-64lib -ID:sdksgsl-64include -llibgsl-0 -llibgslcblas-0

    稍微解释一下,-L是指定库目录,-I是指定包含目录,-l是指定依赖的库文件,只需要文件名,不需要添加.lib后缀。特别注意的是,这些选项和值之间不要加空格,具体可以使用help mex在Matlab中查看用法。

    终于,经过长途跋涉,使用这条命令编译后,梦寐以求的xxxx.mexw64出现了!

    下面。。我要和Matlab中调用函数类型出错来抗争了!!

    Undefined function 'XXXX' for input arguments of type 'double'.

    God bless me~~~

    ==== 更新 ====

    上面这个Undefined function,是我2了,忘记把包含那个函数的路径加到Matlab中去,下次记得了~~( ̄▽ ̄)"

  • 相关阅读:
    win10应用 UWP 使用MD5算法
    win10应用 UWP 使用MD5算法
    用git上传代码到新浪云
    用git上传代码到新浪云
    redis三节点sentinel部署
    [HNOI/AHOI2018]转盘
    用git上传代码到新浪云
    Windows-universal-samples-master示例 XamlCommanding
    Windows-universal-samples-master示例 XamlCommanding
    Windows-universal-samples-master示例 XamlCommanding
  • 原文地址:https://www.cnblogs.com/zhsuiy/p/4793104.html
Copyright © 2011-2022 走看看