我试着在openframeworks上使用Basler(https://www.baslerweb.com/)相机和一些openCV的东西。我以前使用过点灰色相机(带有“FlyCapture2”SDK),没有太多麻烦。Basler有一个称为Pylon SDK的软件,它适用于Windows、Linux和Mac操作系统。
我可以编译Pylon自己的示例而不出任何问题,但是当我#include <pylon/PylonIncludes.h>时,我会立即遇到编译器问题。我已经为我的项目适当地修改了config.make文件(我认为),所以编译器肯定会找到头文件,但是我不断地得到与Pylon库中更深层的内容相关的错误,特别是:

In file included from /usr/include/X11/Xlib.h:44:0,
                 from /usr/include/GL/glx.h:30,
                 from /home/stephen/of_v0.9.8_linux64_release/libs/openFrameworks/utils/ofConstants.h:184,
                 from /home/stephen/of_v0.9.8_linux64_release/libs/openFrameworks/ofMain.h:5,
                 from /home/stephen/of_v0.9.8_linux64_release/apps/myApps/canPointerOsc/src/main.cpp:1:
/opt/pylon5/include/GenApi/Types.h:130:9: error: expected identifier before numeric constant
         None,            //!< name resides in custom namespace

似乎“None”正在被定义(变成一个数字常量?)在别的地方。奇怪的是,在编译他们自己的样本时从来没有发生过这种情况。openFrameworks的编译过程(传递给G++的选项)有什么关系吗可能会破坏他们自己的代码:
//! Defines from which standard namespace a node name comes from
    //! \ingroup GenApi_PublicUtilities
    typedef enum _EStandardNameSpace
    {
        None,            //!< name resides in custom namespace
        GEV,             //!< name resides in GigE Vision namespace
        IIDC,            //!< name resides in 1394 IIDC namespace
        CL,              //!< name resides in camera link namespace
        USB,             //!< name resides in USB namespace
        _UndefinedStandardNameSpace  //!< Object is not yet initialized
    } EStandardNameSpace;

有什么想法吗?

最佳答案

看起来通过预处理器有冲突的定义,可能隐藏在openFrameworks本身或其中一个包含的依赖项中。在包含Pylon头文件之前添加以下行解决了此问题:

#undef None
#undef Status

该死的,预处理器!

10-07 15:21