Linux下C++,matlab混合编程
来源:互联网 发布:arp 添加网关mac 编辑:程序博客网 时间:2024/06/11 17:24
C++调用matlab生成的动态库文件,再生成新的动态库文件
使用python调用C++调用matlab生成的动态库文件
调用过程:
(1). 设定编译器为gcc,在matlab 命令行依次执行命令mex -setup和mbuild -setup.
(2). 编写matlab脚本
(3). 生成动态库文件。 mcc -W cpplib:libmyFunc -T link:lib myFunc.m -C
(4). 安装MCRInstaller
sudo gedit /etc/profileexport LD_LIBRARY_PATH=matlabroot/matlab_compiler/v91/runtime/glnxa64:matlabroot/matlab_compiler/v91/bin/glnxa64:matlabroot/matlab_compiler/v91/sys/os/glnxa64:$LD_LIBRARY_PATHsudo source /etc/profile
(5). 配置环境
sudo gedit /etc/ld.so.confmatlabroot/matlab_compiler/v91/runtime/glnxa64matlabroot/matlab_compiler/v91/bin/glnxa64 sudo ldconfig
(6).C++调用matlab生成的动态库文件生成新的动态库文件CMakeLists.txt
macro (add_sources) file (RELATIVE_PATH _relPath "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}") foreach (_src ${ARGN}) if (_relPath) list (APPEND SRCS "${_relPath}/${_src}") else() list (APPEND SRCS "${_src}") endif() endforeach() if (_relPath) # propagate SRCS to parent directory set (SRCS ${SRCS} PARENT_SCOPE) endif()endmacro()project(MATLABTest)cmake_minimum_required(VERSION 2.8.4)find_package(OpenCV REQUIRED)SET(ENV{Configuration} Release) include_directories(${OPENCV_INCLUDE_DIRS} /matlab/bin/test/ /matlab/matlab_compiler/v91/extern/include/)LINK_DIRECTORIES(/matlab/matlab_compiler/v91/bin/glnxa64/ )add_subdirectory(src)add_executable(main ${SRCS})#ADD_LIBRARY(main SHARED ${SRCS})target_link_libraries(main ${OpenCV_LIBS} /matlab/bin/test/libmyFunc.so /matlab/matlab_compiler/v91/runtime/glnxa64/libmwmclmcrrt.so.9.1 /matlab/matlab_compiler/v91/bin/glnxa64/libmwmclmcr.so)
(7).python调用新生成的动态库文件
使用过程中遇到的问题:
(1).python调用新生成的动态库时出现libssl.so.1.0.0: Undefined symbol “EVP_idea_cbc”。这个问题可能是import cv2 ,import libmyFunc顺序不对所致。正确顺序为import libmyFunc,import cv2 。
(2).python调用新生成的动态库时C++调用matlab动态库时初始化失败。这个问题可能是matlab使用mcc编译动态库时命令选项错误导致,再网上大部分是因为编译选项mcc -W cpplib:libmyFunc -T link:lib myFunc.m -C生成的.ctf没有拷贝到当前目录造成的。而我的matlab 是9.1版本,使用上述方法无效。最终是将-C去掉编译后解决的。
(3).关于C++调用matlab接口传递opencv的Mat类型数据以及matlab返回数组转Mat可以参考[4].注:这种数据转换方式效率很差,想提高效率可以改写其中的图片数据遍历方式或拆分图像通道传递等方式。
参考:
[1].http://blog.csdn.net/arackethis/article/details/43372553
[2].http://blog.csdn.net/arackethis/article/details/43374849
[3].http://blog.csdn.net/arackethis/article/details/43375943
[4].http://www.cnblogs.com/yingying0907/archive/2012/10/13/2722688.html
- Linux下C++,matlab混合编程
- Linux下C和matlab混合编程学习(1)
- linux系统中的C++/MATLAB混合编程
- Matlab C混合编程
- matlab C混合编程
- Matlab C混合编程
- matlab/C 混合编程
- linux下C与C++混合编程
- linux下c/c++混合编程
- linux下C与C++混合编程
- Linux 下 C/C++混合编程
- Win7-64bit下matlab C混合编程环境搭建
- Win7-64bit下matlab C混合编程环境搭建
- Matlab和C混合编程
- matlab与C混合编程
- c和matlab混合编程
- matlab与c混合编程
- matlab与C混合编程
- Graph based Segmentation
- flannel 实战与源码分析(三)
- LeetCode 61. Rotate List
- 机器学习----降维与度量学习(k邻近学习)
- 华为portal2.0协议封装
- Linux下C++,matlab混合编程
- python 字符集编码检测(转载修改)
- 指针之美
- servlet实现form表单的文件上传
- recyclerView的基础使用
- 线程与进程
- Android第三方接入 Udesk
- 带进度条的文件上传jquery
- little kernel分析 [LK]