问题一 :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文件都链接