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. ...
随机推荐
- 自动化测试selenium(四)check,选中复选框,操作一组元素
定位复选框位置 打开浏览器,按F12,审查元素 接下来,我们要实现选中复选框 List<WebElement> inputs = driver.findElements(By.tagNam ...
- Linux修改IP永久生效
修改IP永久生效按以下方法: 1)修改配置文件vi /etc/sysconfig/network-scripts/ifcfg-eth0(eth0,第一块网卡,如果是第二块则为eth1) 按如下修改ip ...
- python爬虫(5)——正则表达式(二)
前一篇文章,我们使用re模块来匹配了一个长的字符串其中的部分内容.下面我们接着来作匹配"1305101765@qq.com advantage 314159265358 1892673 ...
- 开发板访问linux方法
1.使用网线分别将 PC 机与开发板连接到交换机. 2.保证 windows能 ping通 Linux. 2.1.关闭 windows 系统中的其他网络连接,只保留用来和交换机连接的网卡. 2.2.网 ...
- 常见HTTP状态码出现原因
302:重定向.访问当前地址,后端重新指定一个URL,浏览器跳转到新的地址. 303:对于POST请求,它表示请求已被处理,客户端可以接着使用GET方法请求Location里的URL. 304:客户端 ...
- Bruce Eckel的资源
1 GitHub的技术博客 2 On Java 8 – Bruce Eckel 3 artima_weblogs - Bruce Eckel 4 back issues 5 eckel-oo-prog ...
- 你所有不知的margin属性
前言 致谢 本文总结于 张鑫旭老师的 CSS深入理解之margin课程,感谢张老师的辛苦付出! 难学的 CSS 作为前端狗的我们,每天都要和网页打交道.当 UI 将设计稿发给你时,CSS 的知识便显得 ...
- Mysql(一):初识数据库
一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...
- ArrayList源码阅读
前言 数组是我们最常用最简单的数据结构,Java里对数组做了一个简单的包装,就是ArrayList,提供自动扩容的功能. 最常用法 list在我们日常代码中最为常用的做法是创建一个list,放入数据, ...
- .net 分割字符串
string a = "1-2-3-4-5-6-7-8-9"; string[] b = a.Split(new Char[] { '-' }); for (int i = 0; ...