【问题标题】:Integrate C++ Basler camera libraries in Matlab on Mac在 Mac 上的 Matlab 中集成 C++ Basler 相机库
【发布时间】:2026-02-05 04:15:02
【问题描述】:

如何将 C++ 库集成到 Matlab 2018b (macOS Mojave) 中以将它们与 mex() 函数一起使用。目前我想使用 Basler 相机的 C++ 库来解决这个问题。为此,我必须包含以下文件:

*.framework、头文件、*.dylib 文件

否则 c++ 文件中的#include 调用将不起作用。我已经使用以下命令在 QT Creator 中毫无问题地集成了库,#include <pylon/...> 工作正常:

mac: LIBS += -F$$PWD/../../../../../../Library/Frameworks/ -framework pylon macx: LIBS += -L$$PWD/../../../../../../Library/Frameworks/pylon.framework/Versions/A/Libraries/ -lLog_gcc_v3_1_Basler_pylon_v5_1 macx: LIBS += -L$$PWD/../../../../../../Library/Frameworks/pylon.framework/Versions/A/Libraries/ -lGenApi_gcc_v3_1_Basler_pylon_v5_1 INCLUDEPATH += $$PWD/../../../../../../Library/Frameworks/pylon.framework/Headers/GenICam 依赖路径 += $$PWD/../../../../../../Library/Frameworks/pylon.framework/Headers/GenICam 包含路径 += $$PWD/../../../../../../Library/Frameworks/pylon.framework/Versions/A/Libraries 依赖路径 += $$PWD/../../../../../../Library/Frameworks/pylon.framework/Versions/A/Libraries QMAKE_CXXFLAGS += -F/库/框架

在Matlab中我尝试过这种方式,但是不行,在c++文件中调用库的时候报错:

ipath_1 = '-I/Library/Frameworks';
ipath_2 = '-I/Library/Frameworks/pylon.framework/Headers/GenICam';
ipath_3 = '-I/Library/Frameworks/pylon.framework/Versions/A/Libraries';
lib_1 = '-L/Library/Frameworks/pylon.framework/Versions/A/Libraries/ -lLog_gcc_v3_1_Basler_pylon_v5_1';
lib_2 = '-L/Library/Frameworks/pylon.framework/Versions/A/Libraries/ -lGCBase_gcc_v3_1_Basler_pylon_v5_1';
lib_3 = '-L/Library/Frameworks/pylon.framework/Versions/A/Libraries/ -lGenApi_gcc_v3_1_Basler_pylon_v5_1';
mex('-largeArrayDims',...
    '-c',...
     ipath_1, ipath_2, ipath_3,...
     lib_1, lib_2, lib_3,...
    'basler_set_get.cpp')
% Error:
% #include <pylon/PylonIncludes.h>
%          ^~~~~~~~~~~~~~~~~~~~~~~
% 1 error generated.

如何在 Matlab 中管理集成?我很感激任何帮助。

【问题讨论】:

  • 您的文件系统中的pylon/PylonIncludes.h 在哪里?编译器会告诉你问题是什么。
  • 标头位于/Library/Frameworks/pylon.framework/Versions/A/Headers 将标头与“-I..”链接到 mex 也会导致相同的错误

标签: c++ matlab mex


【解决方案1】:

如果有人遇到同样的问题,我想发布一个我在此期间发现的解决方案。如果使用这些标志执行 mex 调用,则一切都正确编译:


mex  '-I/Library/Frameworks/pylon.framework/Versions/A/Headers/GenICam'...
    '-I/Library/Frameworks/pylon.framework/Versions/A/Headers/pylon/usb'...
    '-I/Library/Frameworks/pylon.framework/Versions/A/Headers'...
    '-L/Library/Frameworks/pylon.framework/Versions/A/Libraries'...
    '-lGCBase_gcc_v3_1_Basler_pylon_v5_1.dylib'...
    '-lGenApi_gcc_v3_1_Basler_pylon_v5_1.dylib'...
    CXXFLAGS='-F/Library/Frameworks $CXXFLAGS'...
    LDFLAGS='-framework pylon $LDFLAGS'...
    LIBS+='-framework pylon'...
    [YOUR FILENAME].cpp

【讨论】: