MATLAB 代码中使用的 C++ 代码
Posted
技术标签:
【中文标题】MATLAB 代码中使用的 C++ 代码【英文标题】:C++ Code used in MATLAB code 【发布时间】:2015-02-19 17:31:44 【问题描述】:我有一个 MATLAB 代码及其使用 C++ 代码。
当我尝试使用 MATLAB Coder 构建它时出现错误
未定义的函数或变量'nameOfC++file'。
如何在构建之前包含/定义它?
PS : matlab 代码无需事先定义此 C++ 文件即可工作。
编辑
怎么称呼
r = mlist(d, p);
我有两个文件,mlist.cpp 和 mlist.dll
【问题讨论】:
如果以下答案不充分,提供以下内容会很有帮助:MATLAB 代码的 sn-p,显示 C++ 代码的使用方式,您如何调用 @987654322 的示例@ 命令,以及您正在使用的 MATLAB Coder 选项 如果您看到下面的步骤 (4),要调用 C++ 函数mlist
,您应该使用 coder.ceval('mlist',...)
而不是像 MATLAB 函数那样直接通过名称调用它。
【参考方案1】:
一些开始的建议:
配置 MATLAB Coder 以生成 C++ 代码以确保一致的编译和链接:
cfg = coder.config('lib');
cfg.TargetLang = 'C++';
codegen -config cfg ...
包括所需的标题。在您的 MATLAB 代码中用于代码生成:
function y = example(x)
%#codegen
coder.cinclude('a_header.h');
coder.cinclude('<a_system_header>');
如有必要,将包含路径添加到配置对象 cfg
:
cfg.CustomInclude = '/directory/with/headers /other/directory';
使用coder.ceval
调用您的外部函数:
function y = example(x)
%#codegen
coder.cinclude('a_header.h');
coder.cinclude('<a_system_header>');
% Assume y is a double scalar. Change this to match the return type
% of someExternalFunction
y = 0;
y = coder.ceval('someExternalFunction',x);
将任何必要的 C++ 源文件 (.cpp
)、目标文件 (.o, .obj
) 或库 (.a, .so, .lib, .dylib
等) 传递给 codegen 命令:
codegen -config cfg matlab_function_name source.cpp library.so ...
external code integration 上的文档显示了用于封装对外部代码的依赖项的其他技术。使用这些,您可以从传递给 MATLAB Coder 的 MATLAB 代码中指定必要的库、外部源代码、编译器标志和其他选项。
这意味着您的代码变得独立,因此无需修改配置对象,并且对codegen
的调用无需包含源文件、目标文件和库。
【讨论】:
以上是关于MATLAB 代码中使用的 C++ 代码的主要内容,如果未能解决你的问题,请参考以下文章