Linux 下qt creator 对c++ 和cuda混合编译生成.so 文件

本文介绍如何在Creator上设置编译输出.so文件,包括配置lib模板、定义共享库宏及编译静态库的方法。同时,还详细介绍了CUDA环境下编译动态库的过程,涉及nvcc命令参数设置及链接生成.so文件的具体步骤。
该文章已生成可运行项目,

问题一 :creator 上如何设置可以编译输出.so 文件,要做哪些工作呢?解决如下

1、TEMPLATE = lib

       DEFINES += TESTPCL_LIBRARY        //(我的项目名 TARGET = testPCL)

2、在我要开放出去的接口类那里 做一个定义,就可以在编译的时候自动支持 -shared -fPIC 了

#include <QtCore/qglobal.h>    //必要
#if defined(TESTPCL_LIBRARY)
#  define TESTPCLSHARED_EXPORT Q_DECL_EXPORT
#else
#  define TESTPCLSHARED_EXPORT Q_DECL_IMPORT
#endif


然后在API类那里声明下,如

class TESTPCLSHARED_EXPORT ProcessController
{

*********
   void ***();//函数不用额外声明也行
}

3、静态库**.a 如何编译设置呢 ?

        TEMPLATE = lib

        CONFIG = staticlib    即可

问题二:cuda如何编译动态库呢?

cuda 不支持直接-fPIC,需要在前面加一个-Xcompiler 就行,我的pro文件中设置如下:

CUDA_SDK = "/usr/local/cuda/"   # Path to cuda SDK install

CUDA_DIR = "/usr/local/cuda/"   # Path to cuda toolkit install


# DO NOT EDIT BEYOND THIS UNLESS YOU KNOW WHAT YOU ARE DOING....

SYSTEM_NAME = ubuntu        # Depending on your system either 'Win32', 'x64', or 'Win64'

SYSTEM_TYPE = 64            # '32' or '64', depending on your system

CUDA_ARCH = sm_50           # Type of CUDA architecture,

                            # for example 'compute_10', 'compute_11', 'sm_10'

NVCC_OPTIONS = --use_fast_math



# include paths

INCLUDEPATH += $$CUDA_DIR/include


# library directories

QMAKE_LIBDIR += $$CUDA_DIR/lib64/


# Add the necessary libraries

CUDA_LIBS = -lcuda -lcudart


# The following makes sure all path names (which often include spaces)

# are put between quotation marks

CUDA_INC = $$join(INCLUDEPATH,'" -I"','-I"','"')

LIBS += $$CUDA_LIBS


# Configuration of the Cuda compiler

CONFIG(debug, debug|release) {

    # Debug mode

    cuda.input  = CUDA_SOURCES

    cuda.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o

    cuda.commands = $$CUDA_DIR/bin/nvcc -shared -Xcompiler -fPIC -D_DEBUG $$NVCC_OPTIONS \

                    $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE \

                    -arch=$$CUDA_ARCH -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}

    cuda.dependency_type = TYPE_C

    QMAKE_EXTRA_COMPILERS += cuda

}

else {

    # Release mode

    cuda.input = CUDA_SOURCES

    cuda.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o

    cuda.commands = $$CUDA_DIR/bin/nvcc -shared -Xcompiler -fPIC  $$NVCC_OPTIONS \

                    $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE \

                    -arch=$$CUDA_ARCH -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}

    cuda.dependency_type = TYPE_C

    QMAKE_EXTRA_COMPILERS += cuda

}

命令行的话直接 nvcc -shared -Xcompiler -fPIC -c ***.cu -o ***.o 就行

然后把cuda的o文件和c++的o文件 链接完事生成.so 文件

注意链接的时候后面要加上cuda的库引用,如下

g++ -shared -o libtest.so  *.o -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand -lcudnn //所有o文件都链接

本文章已经生成可运行项目
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值