Qt and compiled cuda library

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.