c++ - 如何通过Matlab Mex编译工具使用C++编译器

标签 c++ matlab mex

我正在尝试在 Matlab 中构建包含 m 文件和 c++ (cpp) 源文件的源代码包。

源文件夹有一个简单的 Matlab 脚本来编译一个文件夹中的所有 cpp 文件:

function compileDir_simple(Cdir)
if nargin<1
    Cdir=pwd;
end

files = dir(fullfile(Cdir,'*.cpp'));

oldDir=pwd;
cd(Cdir);
for j=1:length(files)
    try
        cm = sprintf('mex -largeArrayDims %s',files(j).name);
        disp(cm);
        eval(cm);
catch
    disp(lasterr);
    disp('IGNORE if the file is a C++ file which is not a mex file (ie without a     mexFunction inside)');
    end
end

cd(oldDir);

在内部,它使用“mex -largeArrayDims”。但是,我的问题是,当我评估该语句时,Matlab 试图通过 MATLAB 本身包含的 C 编译器构建所选文件。当我调用 mex -setup 时,我看到:

mex -setup Please choose your compiler for building external interface (MEX) files:

Would you like mex to locate installed compilers [y]/n? y

Select a compiler: 
[1] Lcc-win32 C 2.4.1 in D:\MATLAB\R2010a\sys\lcc 

[0] None 

Compiler: 

我安装了 Bloodshed C++ 编译器并将其 bin 文件夹 ( 添加到 Windows 环境变量中,但我仍然无法在已安装的编译器列表中看到我的 C++ 编译器。只出现 Lcc-win32。声明它是合适的我第一次编译 mex 文件的经历。

最佳答案

Windows 上的 mex 文件只是一个导出名为 mexFunction 的函数的 DLL。原则上,您可以使用任何可以创建 Windows DLL 的编译器来编译 mex 文件。

但是,要在 MATLAB 中使用 mex 函数,需要 MATLAB 了解您的编译器。默认情况下,MATLAB 只知道有限数量的编译器。您选择的编译器不是其中之一。

Bloodshed基于mingw。这意味着您应该能够使用 Gnumex项目以创建 mexopts.bat 文件以供您的编译器使用。

但是,我对在这里使用 Bloodshed 有点怀疑。它是一个 C++ IDE,我不确定您是否特别需要它。我怀疑您正在寻找的只是一个编译器。在这种情况下,您最好安装普通的 mingw。

关于c++ - 如何通过Matlab Mex编译工具使用C++编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23081597/

相关文章:

c++ - 为什么 C++ 允许我将 const char 分配给 const char *?!

c++ - 自定义 C++ 预处理器/Typeful 宏

c++ - MEX编译错误

c - mex 文件和 C 文件之间的不同结果

c - 错误LNK2001 : unresolved external symbol mexFunction

c++ - Boost为同一个线程获取多个锁

c++ - 在释放内存时陷入无限循环

matlab - 如何在给定 MATLAB 中的一组向量的情况下获得最大独立向量?

用 C 创建矩阵微分方程

matlab - 我应该如何将矩阵写入十六进制格式的文本上?