Debian系统中如何将matlab编译后的代码集成到c++中

Posted

技术标签:

【中文标题】Debian系统中如何将matlab编译后的代码集成到c++中【英文标题】:how to integrate matlab compiled code into c++ in Debian system 【发布时间】:2016-12-07 16:27:33 【问题描述】:

我一直在尝试使用 Matlab 编译器 SDK 将我的 Matlab 程序打包为 Debian 系统中的 C++ 共享库。我得到了包括test.c、test.h、test.so的文件夹(test是我的Matlab程序名),并且我已经在Debian系统中安装了Matlab_runtime。我已根据 readme.txt 中的要求设置变量 LD_LIBRARY_PATH_ 和 _ XAPPLRESDIR_ _ *( _ 将 MCR_ROOT 替换为目标计算机上安装 MATLAB 运行时的目录。 (1) 将环境变量 XAPPLRESDIR 设置为这个值: MCR_ROOT/v91/X11/app-defaults (2) 如果环境变量 LD_LIBRARY_PATH 未定义,则将其设置为以下字符串的串联: MCR_ROOT/v91/runtime/glnxa64: MCR_ROOT/v91/bin/glnxa64: MCR_ROOT/v91/sys/os/glnxa64: MCR_ROOT/v91/sys/opengl/lib/glnxa64_)* . 我编辑我的 main.cpp 包括 test.h。当我尝试使用 _ gcc main.cpp -o main_ 编译 main.cpp 时,出现如下错误: 在 main.cpp:2:0 包含的文件中: test.h:15:22: 胎儿错误: mclmcrrt.h: 没有这样的文件或目录 #include "mclmcrrt.h"

I know that mclmcrrt.h is in the package of Matlab_runtime, it means I failed to link to the library of Matlab_runtime. Anybody knows what should I do to make my main.cpp compile successfully? I tried two days to work on how to connect to the Matlab_runtime library, but still failed. I am a beginner to linux. Great thanks if anyone can help.

【问题讨论】:

【参考方案1】:

这是一个编译问题,而不是链接问题。您的编译器不知道mclmcrrt.h 在哪里。请告诉它它在哪里帮助它找到它:

gcc -I<the_folder_where_mclmcrrt.h_lives_in> ...

【讨论】:

您好,非常感谢您的帮助,现在我的代码可以找到头文件,但是现在我遇到了新的问题如下: /tmp/cc8IP6a1.o: 在函数main': main.cpp:(.text+0xa): undefined reference to mclmcrInitialize_proxy' main.cpp:(.text+0x19): 未定义引用mclInitializeApplication_860_proxy' main.cpp:(.text+0x48): undefined reference to testInitialize' main.cpp:(.text+0x77 ): 未定义引用 mlfTest' main.cpp:(.text+0x98): undefined reference to testTerminate' main.cpp:(.text+0x9d): 未定义引用 `mclTerminateApplication_proxy' collect2: 错误: ld 返回 1 退出状态 我知道这应该是 MCR 的链接问题。我的代码是:gcc -L/home/yuan/Documents/Matlab2016b/Matlab_runtime/v91/extern/lib/glnxa64 -L/home/yuan/Documents/Matlab2016b/Matlab_runtime/v91/bin/glnxa64 -I/home/yuan/文档/Matlab2016b/Matlab_runtime/v91/extern/include -I./test -lstdc++ -lgcc_s main.cpp -o main 。如何才能成功链接 MCR? 把 main.cpp 放在库之前。 main.cpp -I./test -lstdc++ -lgcc_s 您好 Shloim,感谢您的快速响应,我已经尝试了您的建议,但实际上并没有任何区别,并且给出了相同的错误。还有其他建议吗?

以上是关于Debian系统中如何将matlab编译后的代码集成到c++中的主要内容,如果未能解决你的问题,请参考以下文章

如何将结构从 Matlab 代码转换为 C 代码(使用 Matlab 编译器)

MATLAB 编译后的GUI 打开慢的解决办法

MATLAB中如何将imshow后的图片保存成原始大小的?

如何编译OpenWrt

编译后的 Matlab 函数只工作一次

编译包含 TCPIP 的脚本后的 Matlab 未知类错误