使用C/C++编写核心算法,使用matlab调用算法、做上层封装,通常是提升效率并提供易用性的一个不错的选择。

mex需要设定接驳的C/C++编译器,官方文档在这里:https://ww2.mathworks.cn/help/matlab/matlab_external/changing-default-compiler.html

简要总结下:

Windows

在Windows下用Visual Studio作为C/C++编译器,允许mex设定或切换在不同版本的VS:

mex -setup C++

Linux

我使用的是Ubuntu16.04。Ubuntu下的gcc版本通常比matlab的mex需要的gcc版本要高。比如ubuntu16.04的gcc默认是5.4版,但matlab2017b只能用gcc-4.9。

查阅文档以及尝试后总结为:

  1. 修改/path/to/matlab/bin/mexopt.sh里面的CCCXX变量的值,是没有用的,即便重启了matlab,mex仍然是调用系统PATH中的gcc和g++,而不是mexopt.sh中的CC和CXX

  2. PATH中的gcc和g++(也就是/usr/bin/gcc和/usr/bin/g++),是一个不好的选择:因为它虽然解决了matlab中的mex编译警告、错误,但是整个操作系统中的其他各种库都有可能收到影响从而无法运行。

  3. 正确的解决方法是,使用mex命令时临时设定GCC和G++版本,举例:

mex GCC='/usr/bin/gcc-4.9' private/edgesDetectMex.cpp -outdir private

matlab设定mex接驳的C/C++编译器的更多相关文章

  1. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(二)

    如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数: double add(double x, double y) { return x + y; } 现在我想要在Matlab中使用它,比 ...

  2. Matlab以MEX方式调用C源代码【转载】

    原文地址:http://blog.sina.com.cn/s/blog_468651400100coas.html 这是自己整理的一个对应的文档:<Matlab以MEX方式调用C源代码> ...

  3. Matlab与C/C++联合编程之Matlab以MEX方式调用C代码(五)完整过程加示

    如下为本人亲证代码: 一: 编译器的安装与配置(环境不同,显示结果不同) 要使用MATLAB编译器,用户计算机上应用事先安装与MATLAB适配的以下任何一种ANSI C/C++编译器: 5.0.6.0 ...

  4. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(四)

    利用Matlab与VC++联合编程,既可在C语言程序中打开Matlab引擎,调用Matlab的ToolBox函数和作图函数,也可在Matlab中调用C代码生成的动态链接库文件,用以加快执行速度.缩短开 ...

  5. matlab设置mex失败

    更新 使用matlab2017b时,又报错, >> mex -setup 警告: Xcode is installed, but its license has not been acce ...

  6. VC 编译 MATLAB 的 mex 文件

    VC 编译 MATLAB 的 mex 文件mex 文件是 MATLAB 调用其他程序设计语言程序或算法的接口.在 Windows 环境中,mex 文件是扩展文件名为 DLL 的动态链接库,可以在 m ...

  7. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(三)

    最近写了个Matlab程序,好慢呐……所以开始学习Matlab与C/C++混合编程.下面写了个测试代码,显示一个Double类型矩阵中的元素. 源代码 #include "mex.h&quo ...

  8. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(一)

    MEX文件是一种可在matlab环境中调用的C语言(或fortran)衍生程序,mex的编译结果实际上就是一个带输出函数mexFunction 的dll文件. 中文名 mex文件 外文名 MATLAB ...

  9. matlab下mex 调用opencv库

    1. 首先写好待编译的.cpp文件,使用混合编程,以人脸检测为例 #include "mex.h" // Required for the use of MEX files // ...

随机推荐

  1. 【Asp.net入门5-02】创建数据模型和存储库

  2. Python【多线程与多进程】

    import time,threading print("=======串行方式.并行两种方式调用run()函数=======")def run(): print('哈哈哈') # ...

  3. python【数据类型:集合】

  4. Ansible5:常用模块

    目录 ping模块 setup模块 file模块 copy模块 service模块 cron模块 yum模块 user模块与group模块 user模块 group示例 synchronize模块 f ...

  5. socket利用多线程实现一对多通信

    1.服务器端:socket()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接.将accept()写入死循环,每次连接一个客户端,开一个线程. 2.一般情况下建立s ...

  6. bootstrap-switch与angularjs结合使用

    bootstrap-switch和angularjs结合使用 由于angularjs的dom操作总是先执行,导致$(input[name="switch"])找不到元素,所以使用d ...

  7. windows下自动启动Redis隐藏命令行窗口

    这段时间看了看关于Redis的相关内容,对于Redis在windows下的安装和常规启动我就不多说了.可以参考其他的博客http://www.cnblogs.com/edisonchou/p/3821 ...

  8. Java并发编程原理与实战三十:CountDownLatch与CyclicBarrier 区别

    相信每个想深入了解多线程开发的Java开发者都会遇到CountDownLatch和CyclicBarrier,大家也在网上看到各种介绍原理,代码的,以及他们区别(应付面试)的,但是很少能讲清楚:他们到 ...

  9. Javascript技术之详尽解析event对象

    描述event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的过程中才有效.event的某些属性只对特定的事件有意义.比如,fromEleme ...

  10. 20155302 2016-2017-2 《Java程序设计》第七周学习总结

    20155302 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 Lambda表达式的优点:更加紧凑的代码.修改方法的能力.更好地支持多核处理 "L ...