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:\sdks\gsl-64\lib -ID:\sdks\gsl-64\include -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中去,下次记得了~~( ̄▽ ̄)"
Windows10 + Matlab2013 mex C++ 调用gsl的更多相关文章
- Matlab与C/C++联合编程之Matlab以MEX方式调用C代码(五)完整过程加示
如下为本人亲证代码: 一: 编译器的安装与配置(环境不同,显示结果不同) 要使用MATLAB编译器,用户计算机上应用事先安装与MATLAB适配的以下任何一种ANSI C/C++编译器: 5.0.6.0 ...
- Matlab以MEX方式调用C源代码【转载】
原文地址:http://blog.sina.com.cn/s/blog_468651400100coas.html 这是自己整理的一个对应的文档:<Matlab以MEX方式调用C源代码> ...
- Origin C调用GSL
GSL (GNU Scientific Library, http://www.gnu.org/software/gsl/)是C.C++的数值算法库,提供了范围宽广的数学程序,包括随机数字生成器.数理 ...
- Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(四)
利用Matlab与VC++联合编程,既可在C语言程序中打开Matlab引擎,调用Matlab的ToolBox函数和作图函数,也可在Matlab中调用C代码生成的动态链接库文件,用以加快执行速度.缩短开 ...
- Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(一)
MEX文件是一种可在matlab环境中调用的C语言(或fortran)衍生程序,mex的编译结果实际上就是一个带输出函数mexFunction 的dll文件. 中文名 mex文件 外文名 MATLAB ...
- Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(二)
如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数: double add(double x, double y) { return x + y; } 现在我想要在Matlab中使用它,比 ...
- Matlab以MEX方式调用C源代码
#include "mex.h" // 使用MEX文件必须包含的头文件 // 执行具体工作的C函数 double add(double x, double y) { return ...
- Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(三)
最近写了个Matlab程序,好慢呐……所以开始学习Matlab与C/C++混合编程.下面写了个测试代码,显示一个Double类型矩阵中的元素. 源代码 #include "mex.h&quo ...
- VC++编译GSL
目录 第1章 VC++ 1 1.1 修改行结束符 1 1.2 修改#include "*.c" 为 #include "*.inl" 2 1. ...
随机推荐
- Swing EDT引起的客户端卡死
最近调试程序时发现,点击某个界面时会出现卡死的情况,出现的频率还是比较频繁的. 再次出现卡死的情况后,利用jvisualvm查看线程的运行情况,dump操作之后发现线程间出现了死锁: Found on ...
- JDBC(二)
三层架构的一些基本报结构如下: domain包:下面是一些实体bean,属性为private,提供属性相对应的set和get方法.一般对应于数据库中的一张数据表,属性对应于数据表中的列. dao包,数 ...
- BZOJ 3786: 星系探索 [伪ETT]
传送门 数据,标程 题意: 一颗有根树,支持询问点到根路径权值和,子树加,换父亲 欧拉序列怎么求路径权值和? 一个点的权值只会给自己的子树中的点贡献,入栈权值正出栈权值负,求前缀和就行了! 和上题一样 ...
- 自兴人工智能-------------Python入门基础(1)
Python 是一门简单易学且功能强大的编程语言. 它拥有高效的高级数据结构, 并且能够用简单而又高效的方式进行面向对象编程. Python 优雅的语法和动态 类型,再结合它的解释性,使其在大多数平台 ...
- PHP数组基本排序算法和查找算法
关于PHP中的基础算法,小结一下,也算是本博客的第一篇文章1.2种排序算法冒泡排序:例子:个人见解 5 6 2 3 7 9 第一趟 5 6 2 3 7 9 5 2 6 3 7 9 5 2 3 6 7 ...
- centos 6 安装zabbix 3.0
1.安装PHP Zabbix 3.0对PHP的要求最低为5.4,而CentOS6默认为5.3.3,完全不满足要求,故需要利用第三方源,将PHP升级到5.4以上,注意,不支持PHP7 rpm -ivh ...
- 获取对象属性类型、属性名称、属性值的研究:反射和JEXL解析引擎
同步发布:http://www.yuanrengu.com/index.php/20170511.html 先简单介绍下反射的概念:java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所 ...
- Json对象与Json字符串互转(4种转换方式)(转)
1>jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2> ...
- node.js简单搭建服务,访问本地站点文件
1.安装nodejs服务(从官网下载安装),node相当于apache服务器 2.在自己定义的目录下新建服务器文件如 server.js 例如,我在D:\nodeJs下创建了server.js文件 v ...
- 函数重载overload
与void show(int a, char b, double c){}构成重载的有: a) void show(int x, char y, double z){} //no b) int sho ...