C++ call matlab on <mac + xcode >

本文介绍了如何在Mac上使用Xcode配置环境变量,编译并运行C++调用MATLAB的示例工程。主要内容包括修改$PATH和$DYLD_LIBRARY_PATH,配置Xcode项目属性,确保动态链接库正确,并将MATLAB接口应用于实际的C++代码中,如kmeans聚类。参考了相关博客和Stack Overflow资源。

本文讲解如何在mac+xcode上用C/C++调用matlab,并给出一个极简单的应用,kmeans.


--------------------------------------------
Catelog

env:matlab 2013+Xcode 4.6+Mac 10.8 (x86-64)
1. 终端下跑matlab例程
2. xcode下跑例程
3. kmeans of matlab under C
4. 利用XCode进行Exception精确定位


--------------------------------------------
1. 终端下跑matlab例程:




我们的目标是:跑通/Applications/MATLAB_R2013a.app/extern/examples/eng_mat/engdemo.cpp

1)修改mac环境变量$PATH & $DYLD_LIBRARY_PATH

终端下:

export PATH='/Applications/MATLAB_R2013a.app/bin':$PATH
echo $PATH

export DYLD_LIBRARY_PATH='/Applications/MATLAB_R2013a.app/bin/maci64:/Applications/MATLAB_R2013a.app/sys/os/maci64':$DYLD_LIBRARY_PATH
echo $DYLD_LIBRARY_PATH

其中echo命令用来查看$PATH & $DYLD_LIBRARY_PATH的修改值。这样可以在该终端下修改$PATH & $DYLD_LIBRARY_PATH,但是永久性修改还需要把你要添加的环境变量添加到你主目录下面的.profile或者.bash_profile,如果存在添加进去即可,如果没有生成一个。PS: mac和linux终端一般用bash来进行解析。当bash在读完了整体环境变量的/etc/profile并借此调用其他配置文件后,接下来则是会读取用户自定义的个人配置文件。bash读取的文件总共有三种:

### macOS 编译时关于 `stddef.h` 和 `math.h` 报错问题解决方案 在 macOS 平台下,当遇到与头文件 `<stddef.h>` 或 `<math.h>` 相关的编译错误时,通常是因为开发环境配置不正确或缺少必要的库链接选项。以下是可能的原因分析以及对应的解决方法: #### 原因一:未正确指定编译器标志 macOS 上的 GCC 或 Clang 默认不会自动链接某些数学库(如 `-lm`)。如果程序中用了 `<math.h>` 中声明的函数而未显式链接数学库,则会出现类似以下错误: ``` undefined reference to 'sin' ``` **解决方法** 在编译命令中添加 `-lm` 参数以链接数学库[^1]。例如: ```bash gcc -o myprogram myprogram.c -lm ``` #### 原因二:Xcode 开发工具未安装或损坏 macOS 的标准 C/C++ 头文件由 Xcode 提供。如果没有安装 Xcode Command Line Tools 或者其安装已损坏,可能会导致无法找到 `<stddef.h>` 或其他核心头文件。 **解决方法** 运行以下命令来重新安装 Xcode Command Line Tools: ```bash xcode-select --install ``` 完成后重启终端并验证是否能够正常访问这些头文件。 #### 原因三:路径冲突或其他依赖缺失 有时项目目录下的自定义头文件可能覆盖了系统的默认头文件,或者存在多个版本的 SDK 导致混乱。这可能导致编译器加载到错误版本的 `<stddef.h>` 文件从而引发兼容性问题。 **解决方法** 清理工作区中的重复头文件副本,并确保使用正确的 include 路径。可以通过修改 Makefile 或直接整 gcc/clang 的参数来强制指定系统级头文件位置: ```bash gcc -isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include \ -o myprogram myprogram.c -lm ``` #### 示例代码片段 下面是一个简单的例子演示如何正确包含 `<math.h>` 并用其中的功能: ```c #include <stdio.h> #include <math.h> int main(void) { double angle = M_PI / 4; printf("The sine of %.2lf radians is %.2lf\n", angle, sin(angle)); return 0; } ``` 编译此代码需加上 `-lm` 标志才能成功完成链接阶段的工作。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值