使用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/profile
export ld_library_path=matlabroot/matlab_compiler/v91/runtime/glnxa64:matlabroot/matlab_compiler/v91/bin/glnxa64:matlabroot/matlab_compiler/v91/sys/os/glnxa64:$ld_library_path
sudo
source /etc/profile
(5). 配置環境
sudo gedit /etc/ld
.so.conf
matlabroot/matlab_compiler/v91/runtime/glnxa64
matlabroot/matlab_compiler/v91/bin/glnxa64
sudo ldconfig
(6).c++呼叫matlab生成的動態庫檔案生成新的動態庫檔案cmakelists.txt
macro (add_sources)
file (relative_path _relpath "$"
"$")
foreach (_src $)
if (_relpath)
else()
endif()
endforeach()
if (_relpath) # propagate srcs to parent directory
set (srcs $ parent_scope)
endif()
endmacro()
project(matlabtest)
cmake_minimum_required(version 2.8.4)
find_package(opencv required)
set(env release)
include_directories($ /matlab/bin/test/ /matlab/matlab_compiler/v91/extern/include/)
link_directories(/matlab/matlab_compiler/v91/bin/glnxa64/ )
add_subdirectory(src)
add_executable(main $)
#add_library(main shared $)
target_link_libraries(main $ /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].
[2].
[3].
[4].
c matlab 混合程式設計
混編終是乙個繞不開的石頭鴨 so do it!我的版本是 vs2017 matlab2016a matlab中的程式處理 1.需要將主程式寫為函式形式,例如我這個主程式matdll,形參三個 從c 獲取,包括兩個c char 轉為matlab char,乙個float 轉為三維陣列 返回值乙個 返回...
linux系統中的C MATLAB混合程式設計
我研究的是影象盲去模糊演算法,因為前期msdecomp預處理是在linux下用c 寫成的,而後面的優化過程均是用matlab寫成的,因此我需要將這兩部分的 融合在一起。這裡記錄的是我在虛擬機器中在linux系統下實現matlab呼叫c 函式的過程。首先安裝vmware,並選擇系統檔案為ubuntu1...
linux下c c 混合程式設計
一.知識儲備 linux下c 用的編譯器是g 而編譯c程式中用的編譯器是gcc,編譯出來的obj檔案肯定是不一樣的,但是c 是相容c的,所以c 檔案是可以編譯成相容c的 比如 include using namespace std void test 1.cpp編譯成.o檔案 g c 1.cpp n...