Importare progetto in Qt
-
Salve a tutti, mi ritrovo qui a chiedere aiuto a voi.
Ho un problema con l'importazione di un progetto in Qt. Il progetto che vorrei importare è un file di esempio dell'sdk Sapera.
Sono su Ubuntu 16.04 e se compilo con il file makefile del progetto originale non ho nessun problema.Praticamente il makefile è questo:
CC= gcc # IROOT directory based on installed distribution tree (not archive/development tree). # IROOT=../.. IROOT=/usr/dalsa/GigeV # # Get the configured include defs file. # (It gets installed to the distribution tree). ifeq ($(shell if test -e archdefs.mk; then echo exists; fi), exists) include archdefs.mk else # Force an error $(error archdefs.mk file not found. It gets configured on installation ***) endif INC_PATH = -I. -I$(IROOT)/include -I$(IROOT)/examples/common $(INC_GENICAM) DEBUGFLAGS = -g CXX_COMPILE_OPTIONS = -c $(DEBUGFLAGS) -DPOSIX_HOSTPC -D_REENTRANT -fno-for-scope \ -Wall -Wno-parentheses -Wno-missing-braces -Wno-unused-but-set-variable \ -Wno-unknown-pragmas -Wno-cast-qual -Wno-unused-function -Wno-unused-label C_COMPILE_OPTIONS= $(DEBUGFLAGS) -fhosted -Wall -Wno-parentheses -Wno-missing-braces \ -Wno-unknown-pragmas -Wno-cast-qual -Wno-unused-function -Wno-unused-label -Wno-unused-but-set-variable LCLLIBS= -L$(ARCHLIBDIR) -lpthread -lXext -lX11 -L/usr/local/lib -lGevApi -lCorW32 VPATH= . : ../common %.o : %.cpp $(CC) -I. $(INC_PATH) $(CXX_COMPILE_OPTIONS) $(ARCH_OPTIONS) -c $< -o $@ %.o : %.c $(CC) -I. $(INC_PATH) $(C_COMPILE_OPTIONS) $(ARCH_OPTIONS) -c $< -o $@ OBJS= genicam_cpp_demo.o \ GevUtils.o \ X_Display_utils.o genicam_cpp_demo : $(OBJS) $(CC) -g $(ARCH_LINK_OPTIONS) -o genicam_cpp_demo $(OBJS) $(LCLLIBS) $(GENICAM_LIBS) -L$(ARCHLIBDIR) -lstdc++ clean: rm *.o genicam_cpp_demo
Aggiungendo le directory nel file .pro ottengo questo:
QT -= gui CONFIG += c++11 console CONFIG -= app_bundle DEFINES += QT_DEPRECATED_WARNINGS SOURCES += \ main.cpp HEADERS += \ ../DALSA/GigeV/examples/genicam_cpp_demo/corenv.h INCLUDEPATH += /usr/dalsa/GigeV/examples/common/ \ /usr/dalsa/GigeV/include/ \ /opt/genicam_v3_0/library/CPP/include/ LIBS += -L/usr/lib -L/usr/local/lib -lpthread -lXext -lX11 -lGevApi -lCorW32
Effettivamente dopo aver inserito le tre directory dell'INCLUDEPATH mi trova tutti i file *.h se provo a compilare ottengo quest'errore:
:-1: error: main.o: undefined reference to symbol '_ZNK11GenICam_3_016GenericException17GetSourceFileNameEv' /opt/genicam_v3_0/bin/Linux64_x64/libGCBase_gcc421_v3_0.so:-1: error: error adding symbols: DSO missing from command line :-1: error: collect2: error: ld returned 1 exit status
Altra cosa che non mi è chiara è questo file archdefs.mk
#----------------------------------------------------------------------------- # archdefs.mk # # Description: # Architecture specific definitions for compiling and linking # programs using GigE-V Framework API and GenICam libraries. # For i86/x86_64 # #-----------------------------------------------------------------------------# # Architecture-dependent definitions. # (GenICam libraries have different paths and names depending on the architecture) # # Architecture specific environment defs for self-hosted environment # ifndef ARCH ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/x86_64/x86_64/ -e s/armv5.*/armv5/ -e s/armv6.*/armv6/ -e s/armv7.*/armv7/) endif ifeq ($(ARCH), x86_64) ARCHNAME=x86_64 ARCH_GENICAM_BIN=Linux64_x64 ARCH_OPTIONS= -Dx86_64 -D_REENTRANT ARCH_GCCVER=421 else ifeq ($(ARCH), i386) ARCHNAME=i386 ARCH_GENICAM_BIN=Linux32_i86 ARCH_OPTIONS= -D__i386__ -D_REENTRANT ARCH_GCCVER=421 else # Not supported $(error Architecture $(ARCH) not configured for this installation.) endif endif ARCHLIBDIR=/usr/lib # # Arch dependent GenICam library specification # GENICAM_PATH_VERSION=v3_0 GENICAM_PATH:=$(GENICAM_ROOT_V3_0) INC_GENICAM=-I$(GENICAM_PATH)/library/CPP/include GENICAM_LIBS=-L$(GENICAM_PATH)/bin/$(ARCH_GENICAM_BIN)\ -lGenApi_gcc$(ARCH_GCCVER)_$(GENICAM_PATH_VERSION)\ -lGCBase_gcc$(ARCH_GCCVER)_$(GENICAM_PATH_VERSION)
Sapreste aiutarmi o indirizzarmi verso qualcosa da controllare ?
ps Il progetto è composto da due soli file (un file .cpp e un file .h)
ps ps: Sono riuscito a importare il progetto facendo new project -> import existing project ma non è quello che volevo.. io volevo riusciore (lasciatemel passare) "convertire il file makefile in .pro"
Aggiorno il post. Sono riuscito ad andare avanti ma riscontro problemi con le librerie X11 per la gestione delle finestre di ubuntu. Se commento le righe di codice che usano queste librerie il programma funziona ma avviamente non mi fa vedere la finestra.
Facendo alcune prove sembra che i problemi siano dovuti dal fatto che Qt usi g++ mentre nel make uso gcc -
Ciao, a prima vista vedo che si tratta di un problema di link. Vedo infatti che nel progetto vuoi incamerare i file oggetto
genicam_cpp_demo.o
GevUtils.o
X_Display_utils.oE' corretto?
Questi file con che macchina sono stati compilati? Con la tua?
Perché se non è così credo che il problema sia semplicemente che loro vogliono materiale che nel tuo pc non c'è o non è della versione giusta.