Calling matlab from C++
Calling matlab from C++
我试图从.cpp文件调用matlab。我用下面的命令来编译engdemo.cpp
,包括"engine.h"
g++ engdemo.cpp -I/usr/local/matlabR2010a/extern/include -L/usr/local/matlabR2010a/extern/lib -o engdemo
我得到的结果如下:
engdemo.cpp:(.text+0xdb): undefined reference to `engOpen'
engdemo.cpp:(.text+0x12d): undefined reference to `mxCreateDoubleMatrix'
engdemo.cpp:(.text+0x143): undefined reference to `mxGetPr'
engdemo.cpp:(.text+0x175): undefined reference to `engPutVariable'
engdemo.cpp:(.text+0x189): undefined reference to `engEvalString'
…
collect2: ld返回1退出状态
我猜这可能是一些链接问题,但我不确定。请帮帮我。提前感谢!
按照@Kurt S所说的,您需要包含库。这些是你需要的常用工具:libeng。自由libmat。自由libmx。Lib,但您可能需要其他人。
所以你想添加链接选项-llibeng -llibmat -llibmx
但你可能也需要别人
下面是一个简单的makefile来帮助你开始:
Makefile
# root directory of MATLAB installation
MATLABROOT="/usr/local/matlabR2010a"
all: engdemo
engdemo:
g++ ${MATLABROOT}/extern/examples/eng_mat/engdemo.cpp -o engdemo
-I${MATLABROOT}/extern/include
-L${MATLABROOT}/extern/lib -llibeng -llibmx
clean:
rm -f engdemo *.o
只需通过调用make
来使用它,然后作为./engdemo
运行程序
也可以直接从MATLAB内部编译。首先,确保您至少运行了一次mbuild -setup
命令:
>> srcFile = fullfile(matlabroot,'extern','examples','eng_mat','engdemo.cpp');
>> mbuild(srcFile, '-llibeng','-llibmx')
>> !engdemo
问题是包含文件和文件夹(即库和链接文件)和一些额外依赖的规范不正确。
您可以使用一个简单的演示代码,用于C/c++与MATLAB的接口在这里给出,从而了解需要做什么。
您还需要使用CMAKELISTS.TXT文件,其中包含适合MATLAB的设置,这里有一个很好的教程。
您需要使用g++的-l选项告诉它要链接到哪些库。根据您的链接行,库应该在/usr/local/matlabR2010a/extern/lib中。例如,如果您需要的库称为libmatlab。a您需要在命令行中添加-lmatlab
选项。
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- std::async from std::async in windows xp
- std::is_reference from std::any
- std::time_point from and to std::string
- "No suitable conversion function from 'std::string' to 'const char *' exists"
- std::chrono::time_point from std::string
- Visual accept std::string from std::byte iterator
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- C++ 中的"template <typename From, typename Tag> struct Alias;"是什么?
- from std::vector to adept::avector
- qt get child (Callout) from QChart
- Webassembly from Javascript
- Generate boost::uuids::uuid from boost::compute::detail::sha
- 什么是"Reading unbounded stream from standard input (Memory Management)"的例子
- Calling C++ dll from python
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- std::chrono 在从 main 或 from 类方法使用时给出不同的值
- Calling Python Script from Visual Studio C++ Solution
- Access C++ Enum from Swift