You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu18.04 Eclipse中C++调用Matlab编译共享库报错求解决方案

解决Matlab编译的C++共享库调用时的未定义引用问题

首先,你遇到的这些未定义引用错误本质是编译链接阶段没有正确关联Matlab Runtime提供的核心库,以及你自己生成的libtestAdd.so库。咱们一步步来解决:

1. 先修正测试代码里的笔误

你的代码里有两个明显的变量名错误,会导致编译前的语法问题:

// 原错误代码
input_A.SetData(M,1);
input_B.SetData(K,1);
// 修正为(M替换成A,K替换成B)
input_A.SetData(A,1);
input_B.SetData(B,1);

2. 使用正确的编译链接命令

你当前的编译命令g++ main.cpp -o main只编译了源代码,但没有链接任何依赖库。需要添加参数指定头文件路径、库路径以及要链接的库:

完整编译命令示例

g++ main.cpp -o main \
-I/usr/local/MATLAB/MATLAB_Runtime/v95/extern/include \
-L/usr/local/MATLAB/MATLAB_Runtime/v95/runtime/glnxa64 \
-L/home/csrl/Desktop/libtestAdd/for_testing \
-ltestAdd -lmclmcrrt -lmclcpplib

参数解释:

  • -I:指定头文件搜索目录,这里直接指向Matlab Runtime的include文件夹(不用再手动复制头文件了)
  • -L:指定库文件搜索目录,分别添加Matlab Runtime的库目录和你生成的libtestAdd.so所在目录
  • -l:指定要链接的库,顺序很重要:
    • ltestAdd:链接你自己生成的加法库(注意去掉前缀lib和后缀.so)
    • lmclmcrrt:Matlab Runtime核心运行库
    • lmclcpplib:Matlab的C++接口支持库,对应mwArray这些类的实现

3. 确保环境变量生效

你已经在/etc/profile里配置了LD_LIBRARY_PATH,但要注意:

  • 配置后需要执行source /etc/profile让当前终端生效,或者重启终端
  • 如果运行时还是提示找不到库,可以在运行前临时指定:
export LD_LIBRARY_PATH=/usr/local/MATLAB/MATLAB_Runtime/v95/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v95/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v95/sys/os/glnxa64:$LD_LIBRARY_PATH
./main

4. 额外检查项

  • 确认你的Matlab Runtime版本(R2018b对应v95)和编译库时用的Matlab版本一致,版本不匹配会导致兼容性问题
  • 确保libtestAdd.so的权限是可执行的(可以用chmod +x libtestAdd.so调整)

按照上面的步骤操作后,应该就能成功编译并运行你的测试程序了。

内容的提问来源于stack exchange,提问作者Dejiang Piao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:13:08