Hello,
I compile a cuda library which contains few functions and I generate a libMyLibraryCuda.so.
Now I want to use it in QtCreator Project. As soon as I use an object from the libMyLivrarycuda.so there is a segmentation fault.
Here is the compilation library part:
TEMPLATE = lib
CONFIG += console
CONFIG -= qt
CONFIG += no_plugin_name_prefix
SOURCES += \
CONFIG += link_pkgconfig
PKGCONFIG += opencv
INCLUDEPATH += /usr/local/include
INCLUDEPATH += /usr/local/include/opencv
LIBS += -L/usr/local/lib
LIBS += -L/usr/lib/x86_64-linux-gnu
LIBS += -L/usr/local/share/OpenCV/3rdparty/lib
LIBS += -lm
LIBS += -lopencv_core
LIBS += -lopencv_imgproc
LIBS += -lopencv_highgui
LIBS += -lopencv_objdetect
LIBS += -lopencv_calib3d
LIBS += -lGL -lGLU -lX11 -lglut -lGLEW -lpthread
# CUDA settings <-- may change depending on your system
CUDA_SOURCES += ./cuda/Resizer.cu
CUDA_SDK = /usr/lib/nvidia-cuda-toolkit #/usr/include/ # Path to cuda SDK install
CUDA_DIR = /usr/lib/nvidia-cuda-toolkit # Path to cuda toolkit install
# DO NOT EDIT BEYOND THIS UNLESS YOU KNOW WHAT YOU ARE DOING....
SYSTEM_NAME = unix # Depending on your system either 'Win32', 'x64', or 'Win64'
SYSTEM_TYPE = 64 # '32' or '64', depending on your system
CUDA_ARCH = sm_52 # Type of CUDA architecture, for example 'compute_10', 'compute_11', 'sm_10'
NVCC_OPTIONS = #--use_fast_math
# include paths
INCLUDEPATH += $$CUDA_DIR/include
INCLUDEPATH += $$CUDA_DIR/
# library directories
QMAKE_LIBDIR += /usr/lib/x86_64-linux-gnu#/usr/lib/nvidia-cuda-toolkit/lib #/usr/lib/i386-linux-gnu #$CUDA_DIR/lib/
CUDA_OBJECTS_DIR = ./
# Add the necessary libraries
CUDA_LIBS = -lcuda -lcudart -lnppi -lnpps
# The following makes sure all path names (which often include spaces) are put between quotation marks
CUDA_INC = $$join(INCLUDEPATH,'" -I"','-I"','"')
LIBS += -L /usr/lib/x86_64-linux-gnu -lcuda -lcudart -lnppi -lnpps
NVCC_LIBS = -lGL -lGLU -lX11 -lglut -lGLEW
# Release mode
cuda.input = CUDA_SOURCES
cuda.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
cuda.commands = $$CUDA_DIR/bin/nvcc -Xcompiler="-fPIC" -shared -dc $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -gencode arch=compute_50,code=compute_50 -gencode arch=compute_52,code=compute_52 -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
cuda.dependency_type = TYPE_C
QMAKE_EXTRA_COMPILERS += cuda
CUDA_SOURCES_LINK = Blending_cuda.o
cudaLINK.input = CUDA_SOURCES_LINK
cudaLINK.output = $$CUDA_OBJECTS_DIR/${TARGET}_cuda.o
cudaLINK.commands = $$CUDA_DIR/bin/nvcc -Xcompiler="-fPIC" -shared -ccbin g++ -dlink $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -gencode arch=compute_50,code=compute_50 -gencode arch=compute_52,code=compute_52 Resizer_cuda.o -o ${TARGET}_cuda.o
QMAKE_EXTRA_COMPILERS += cudaLINK
HEADERS += \
cuda/Resizer.h \
VERSION = 1.3.5 # major.minor.patch
Here is the use of my library in Qt project:
#-------------------------------------------------
# Project created by QtCreator 2017-02-27T11:16:54
#-------------------------------------------------
QT += core gui
QT += widgets
TARGET = GUI
TEMPLATE = app
SOURCES += src/main.cpp
HEADERS += \
include/main.h \
DISTFILES +=
CONFIG += link_pkgconfig
PKGCONFIG += opencv
INCLUDEPATH += /usr/local/include
INCLUDEPATH += /usr/local/include/opencv
INCLUDEPATH += $$PWD/../../.Release/libMyLivrarycuda/include
LIBS += -L/usr/local/lib
LIBS += -L/usr/lib/x86_64-linux-gnu
LIBS += -L/usr/local/share/OpenCV/3rdparty/lib
LIBS += -lm
LIBS += -lopencv_core
LIBS += -lopencv_imgproc
LIBS += -lopencv_highgui
LIBS += -lopencv_objdetect
LIBS += -lopencv_calib3d
LIBS += -lGL -lGLU -lX11 -lglut -lGLEW -lpthread
LIBS += -L /usr/lib/x86_64-linux-gnu -lcuda -lcudart
LIBS += -L/lib
LIBS += -lMyLivrarycuda
And the main file:
#include <QApplication>
#include "cuda/Resizer.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
gpu::Resizer *p = new gpu::Resizer(640,480,gpu::Resizer::DownSampling,gpu::Resizer::Gray,2); // ligne error
return a.exec();
}
When I comment th ligne “gpu::Resizer *p …” the program works but when I use this line there is a segmentation fault.
I am really stuck.