PDA

View Full Version : Member reference type issue with shared library



Gozz
26th April 2019, 13:05
Hi everyone,

First of all, I am French so sorry in advance for my English.

I am working on a C++ project on Qt Creator 5.12 with the Spinnaker API ( https://www.ptgrey.com/Content/Images/uploaded/downloads/Software/2016/Spinnaker/html/index.html)

Basically, I need my project to work on both Linux(Ubuntu 18.04) and Windows(Windows 10) OS with this API.

On Windows, everything is working fine but on Ubuntu, it seems that Qt doesn't recognize the header files of the library because i have the following compilation issues :

/home/ntnu/Last/main.cpp:16: erreur : member reference type 'Spinnaker::SystemPtr' is not a pointer; did you mean to use '.'?

/home/ntnu/Last/main.cpp:16: erreur : no member named 'GetCameras' in 'Spinnaker::SystemPtr'

Here is the following piece of code ( which is an extract from the example code called "Acquisition" ) :



#include "spinnaker/Spinnaker.h"
#include "spinnaker/SpinGenApi/SpinnakerGenApi.h"

using namespace Spinnaker;
using namespace Spinnaker::GenApi;
using namespace Spinnaker::GenICam;
using namespace std;

int main(int argc, char *argv[])
{

SystemPtr system = System::GetInstance();
CameraList camList = system->GetCameras();
return 0;
}


This is my .pro file :


#-------------------------------------------------
#
# Project created by QtCreator 2019-04-26T13:02:00
#
#-------------------------------------------------

QT += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Last
TEMPLATE = app

INCLUDEPATH += /usr/include/spinnaker

LIBS += -lSpinnaker

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0

CONFIG += c++11

SOURCES += \
main.cpp \
mainwindow.cpp

HEADERS += \
include/AVIRecorder.h \
include/ArrivalEvent.h \
include/BasePtr.h \
include/Camera.h \
include/CameraBase.h \
include/CameraDefs.h \
include/CameraList.h \
include/CameraPtr.h \
include/ChunkData.h \
include/DeviceEvent.h \
include/Event.h \
include/Exception.h \
include/GUI/CameraSelection.h \
include/GUI/CameraSelectionDlg.h \
include/GUI/CameraSelectionWidget.h \
include/GUI/PropertyGrid.h \
include/GUI/PropertyGridDlg.h \
include/GUI/PropertyGridWidget.h \
include/GUI/RapidXML/rapidxml.hpp \
include/GUI/RapidXML/rapidxml_iterators.hpp \
include/GUI/RapidXML/rapidxml_print.hpp \
include/GUI/RapidXML/rapidxml_utils.hpp \
include/GUI/SpinnakerGUI.h \
include/GUI/SpinnakerGUI_GTKmm.h \
include/GUI/SpinnakerGUI_WPF.h \
include/GUI/Viewer.h \
include/GUI/ViewerDlg.h \
include/GUI/ViewerWidget.h \
include/Image.h \
include/ImageEvent.h \
include/ImagePtr.h \
include/ImageStatistics.h \
include/Interface.h \
include/Interface/IArrivalEvent.h \
include/Interface/ICameraBase.h \
include/Interface/ICameraList.h \
include/Interface/IChunkData.h \
include/Interface/IDeviceEvent.h \
include/Interface/IImage.h \
include/Interface/IImageEvent.h \
include/Interface/IImageStatistics.h \
include/Interface/IInterface.h \
include/Interface/IInterfaceEvent.h \
include/Interface/IInterfaceList.h \
include/Interface/ILoggingEvent.h \
include/Interface/IRemovalEvent.h \
include/Interface/ISystem.h \
include/InterfaceEvent.h \
include/InterfaceList.h \
include/InterfacePtr.h \
include/LoggingEvent.h \
include/LoggingEventData.h \
include/LoggingEventDataPtr.h \
include/RemovalEvent.h \
include/SpinGenApi/Autovector.h \
include/SpinGenApi/Base.h \
include/SpinGenApi/BooleanNode.h \
include/SpinGenApi/CategoryNode.h \
include/SpinGenApi/ChunkAdapter.h \
include/SpinGenApi/ChunkAdapterDcam.h \
include/SpinGenApi/ChunkAdapterGEV.h \
include/SpinGenApi/ChunkAdapterGeneric.h \
include/SpinGenApi/ChunkAdapterU3V.h \
include/SpinGenApi/ChunkPort.h \
include/SpinGenApi/CommandNode.h \
include/SpinGenApi/Compatibility.h \
include/SpinGenApi/Container.h \
include/SpinGenApi/Counter.h \
include/SpinGenApi/EnumClasses.h \
include/SpinGenApi/EnumEntryNode.h \
include/SpinGenApi/EnumNode.h \
include/SpinGenApi/EnumNodeT.h \
include/SpinGenApi/EventAdapter.h \
include/SpinGenApi/EventAdapter1394.h \
include/SpinGenApi/EventAdapterGEV.h \
include/SpinGenApi/EventAdapterGeneric.h \
include/SpinGenApi/EventAdapterU3V.h \
include/SpinGenApi/EventPort.h \
include/SpinGenApi/Filestream.h \
include/SpinGenApi/FloatNode.h \
include/SpinGenApi/FloatRegNode.h \
include/SpinGenApi/GCBase.h \
include/SpinGenApi/GCString.h \
include/SpinGenApi/GCStringVector.h \
include/SpinGenApi/GCSynch.h \
include/SpinGenApi/GCTypes.h \
include/SpinGenApi/GCUtilities.h \
include/SpinGenApi/IBoolean.h \
include/SpinGenApi/ICategory.h \
include/SpinGenApi/IChunkPort.h \
include/SpinGenApi/ICommand.h \
include/SpinGenApi/IDestroy.h \
include/SpinGenApi/IDeviceInfo.h \
include/SpinGenApi/IEnumEntry.h \
include/SpinGenApi/IEnumeration.h \
include/SpinGenApi/IEnumerationT.h \
include/SpinGenApi/IFloat.h \
include/SpinGenApi/IInteger.h \
include/SpinGenApi/INode.h \
include/SpinGenApi/INodeMap.h \
include/SpinGenApi/INodeMapDyn.h \
include/SpinGenApi/IPort.h \
include/SpinGenApi/IPortConstruct.h \
include/SpinGenApi/IPortRecorder.h \
include/SpinGenApi/IRegister.h \
include/SpinGenApi/ISelector.h \
include/SpinGenApi/ISelectorDigit.h \
include/SpinGenApi/IString.h \
include/SpinGenApi/IValue.h \
include/SpinGenApi/IntRegNode.h \
include/SpinGenApi/IntegerNode.h \
include/SpinGenApi/Node.h \
include/SpinGenApi/NodeCallback.h \
include/SpinGenApi/NodeCallbackImpl.h \
include/SpinGenApi/NodeMap.h \
include/SpinGenApi/NodeMapFactory.h \
include/SpinGenApi/NodeMapRef.h \
include/SpinGenApi/Persistence.h \
include/SpinGenApi/Pointer.h \
include/SpinGenApi/PortImpl.h \
include/SpinGenApi/PortNode.h \
include/SpinGenApi/PortRecorder.h \
include/SpinGenApi/PortReplay.h \
include/SpinGenApi/PortWriteList.h \
include/SpinGenApi/Reference.h \
include/SpinGenApi/RegisterNode.h \
include/SpinGenApi/RegisterPortImpl.h \
include/SpinGenApi/SelectorSet.h \
include/SpinGenApi/SpinTestCamera.h \
include/SpinGenApi/SpinnakerGenApi.h \
include/SpinGenApi/StringNode.h \
include/SpinGenApi/StringRegNode.h \
include/SpinGenApi/StructPort.h \
include/SpinGenApi/Synch.h \
include/SpinGenApi/Types.h \
include/SpinGenApi/ValueNode.h \
include/SpinVideo.h \
include/SpinVideoDefs.h \
include/Spinnaker.h \
include/SpinnakerDefs.h \
include/SpinnakerPlatform.h \
include/System.h \
include/SystemPtr.h \
include/TransportLayerDefs.h \
include/TransportLayerDevice.h \
include/TransportLayerInterface.h \
include/TransportLayerStream.h \
include/TransportLayerSystem.h \
include/spinc/CameraDefsC.h \
include/spinc/ChunkDataDefC.h \
include/spinc/QuickSpinC.h \
include/spinc/QuickSpinDefsC.h \
include/spinc/SpinVideoC.h \
include/spinc/SpinnakerC.h \
include/spinc/SpinnakerDefsC.h \
include/spinc/SpinnakerGenApiC.h \
include/spinc/SpinnakerGenApiDefsC.h \
include/spinc/SpinnakerPlatformC.h \
include/spinc/TransportLayerDefsC.h \
include/spinc/TransportLayerDeviceC.h \
include/spinc/TransportLayerInterfaceC.h \
include/spinc/TransportLayerStreamC.h \
include/spinc/TransportLayerSystemC.h \
mainwindow.h

FORMS += \
mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

DISTFILES += \
include/GUI/RapidXML/license.txt \
include/GUI/RapidXML/manual.html \
include/GUI/hicolor-icon-theme/share/icons/hicolor/index.theme



The main fact is that the example codes which are given with the API work, i try to compiled this piece of code with a Makefile and it is working and also it works on Windows so i don't know if this is a Qt issue or an issue due to the API.
I also tried many things on the pro file with -L, cmake flags but nothing is changing.

Thank you in advance for your time ! :)

anda_skoa
8th May 2019, 14:20
Header not found generates a very different error.

Unfortunately without seeing the declaration of SystemPtr it is hard to tell why you are getting the error you are seeing.

It is probably a smart point of sorts which means it should have operator->()

Cheers,
_