在MATLAB中编译C文件

时间:2015-05-20 02:50:55

标签: matlab compilation wolfram-mathematica mex

描述

我有一个用于MATLAB的 Mathematica 符号工具箱 - 版本2.0 here

然后我使用它在MATLAB环境中编译的文档

安装步骤:

  
      
  • 1)转到 Mathematica 目录,找到文件mathlink.h in   E:\数学\数学\ 5 \附加元件\ MathLink的\ DeveloperKit \的Windows \ CompilerAdditions \ mldev32 \包括”   还有文件ml32i1m.lib   E:\数学\数学\ 5 \附加元件\ MathLink的\ DeveloperKit \的Windows \ CompilerAdditions \ mldev32 \ lib中。将两个文件复制到预定目录(我们将此目录称为C:\ xxx)。
  •   
  • 2)将压缩文件math.tar的内容复制到C:\ xxx。
  •   
  • 3)打开Matlab命令窗口并执行mex –setup。在C:\ Program Files \ Microsoft Visual Studio中选择“Microsoft Visual C / C ++版本6.0”。这告诉Matlab它需要使用C编译器(而不是Fortran编译器)。您需要安装Microsoft Visual C / C ++。不要选择“C:\ MATLAB6P1 \ sys \ lcc中的Lcc C版本2.4”选项。   4)打开Matlab命令窗口并运行mathrun.m。该程序将编译C文件math.c
  •   

我看到的文件是belew:

  

enter image description here

然后我一步一步地做

(1)在以下路径中找到mathlink.hml32i1m.lib

  

d:\沃尔夫勒姆研究公司\数学\ 8.0 \ SystemFiles \捷径\ MathLink的\ DeveloperKit \的Windows \ CompilerAdditions \ mldev32 \包括   D:\ Wolfram Research \ Mathematica \ 8.0 \ SystemFiles \ Links \ MathLink \ DeveloperKit \ Windows \ CompilerAdditions \ mldev32 \ lib

(2)将压缩文件math.zip的内容复制到C:\ XXX

  

enter image description here

(3)在MATLAB中编译

  mex -setup
  

enter image description here   enter image description here

(4)last setp

addpath C:\XXX
run mathrun.m
  

enter image description here

我不知道为什么?

更新

mathrun.m

中的matlab代码
addpath C:\XXX; 
% adds the directory C:\XXX to the list of directories which Matlab "sees" (referred to as paths)
mlpath='C:\XXX'   % The directory where mathlink.h is
mllib='C:\XXX\ml32i1m.lib'   % The library ml32i1m.lib

% make command
command=sprintf('mex -D__STDC __ -I % s % s % s', mlpath, 'math.c', mllib);
% compile
eval(command)  

1 个答案:

答案 0 :(得分:2)

似乎路径未正确传递给mex,因此无法找到math.c。评论原始行:

%command=sprintf('mex -D__STDC __ -I % s % s % s', mlpath, 'math.c', mllib);

并添加此代码:

command=sprintf('mex -D__STDC __ -I%s %s %s', mlpath, 'math.c', mllib);

因为mex文档指定-I开关和输入路径之间不应有空格。为了安全起见,你甚至可以写:

command=sprintf('mex -D__STDC __ -I%s %s %s', mlpath, fullfile(mlpath,'math.c'), mllib);