Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ &引用;“无法识别文件格式”;使用qmake使用nvcc和gcc编译CUDA代码时_C++_Qt_Gcc_Cuda_Nvcc - Fatal编程技术网

C++ &引用;“无法识别文件格式”;使用qmake使用nvcc和gcc编译CUDA代码时

C++ &引用;“无法识别文件格式”;使用qmake使用nvcc和gcc编译CUDA代码时,c++,qt,gcc,cuda,nvcc,C++,Qt,Gcc,Cuda,Nvcc,我必须在我的项目中创建以下两个文件: home/cuda_compilation_test/ main.cpp libcudatest.cu cuda_compilation_test.pro 我正在使用QtCreator和qmake进行编译。但是,当我使用下面显示的项目文件构建项目时,我收到一个链接错误无法识别文件格式;作为链接器脚本处理。 尽管如此,它还是在调试目录中生成了两个对象文件 home/build-cuda_compilation_test-Desktop

我必须在我的项目中创建以下两个文件:

home/cuda_compilation_test/
    main.cpp
    libcudatest.cu
    cuda_compilation_test.pro
我正在使用QtCreator和qmake进行编译。但是,当我使用下面显示的项目文件构建项目时,我收到一个链接错误无法识别文件格式;作为链接器脚本处理。 尽管如此,它还是在调试目录中生成了两个对象文件

home/build-cuda_compilation_test-Desktop-Debug/
    main.o
    libcudatest.o
我怎么能

  • 检查目标文件是否正确生成,并
  • 在主项目中包含单独编译的libcudatest.o
  • 为了进一步参考,这是编译器输出

    g++ -m64 -o cuda_compilation_test_2 libcudatest.o main.o    -L/usr/lib/x86_64-linux-gnu -L/usr/local/cuda/lib64 -lcudart -lcudatest -lQtGui -lQtCore -lpthread 
    /usr/bin/ld:libcudatest.o: file format not recognized; treating as linker script
    /usr/bin/ld:libcudatest.o:1: syntax error
    collect2: error: ld returned 1 exit status
    make: *** [cuda_compilation_test_2] Error 1
    11:19:20: The process "/usr/bin/make" exited with code 2.
    
    以及项目文件:

    TEMPLATE =
    
    # Files
    SOURCES += main.cpp
    
    OTHER_FILES += libcudatest.cu
    
    LIBS += -L/usr/local/cuda/lib64
    LIBS += -lcudart -lcudatest
    
    # CUDA path
    CUDA_DIR = /usr/local/cuda
    CUDA_CC = $$CUDA_DIR/bin/nvcc
    
    # CUDA Setup
    CUDA_SOURCES  = libcudatest.cu
    NVCCINCLUDES +=
    NVCCFLAGS     = --shared -arch sm_35 -Xcompiler -fPIC --ptxas-options=-v
    INCLUDEPATH  +=
    LIBS         +=
    
    
    # Configuration of the Cuda compiler
    # http://doc.qt.io/qt-4.8/qmake-environment-reference.html#customizing
    CONFIG(debug, debug|release) {
        # Debug mode
        cuda_d.input = CUDA_SOURCES
        cuda_d.output = ${QMAKE_FILE_BASE}.o
        cuda_d.commands = $$CUDA_CC -D_DEBUG $$NVCCFLAGS $$NVCCINCLUDES $$LIBS -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
        cuda_d.dependency_type = TYPE_C
        QMAKE_EXTRA_COMPILERS += cuda_d
    }
    else {
    # Release mode
        cuda.input = CUDA_SOURCES
        cuda.output = ${QMAKE_FILE_BASE}.o
        cuda.commands = $$CUDA_CC $$NVCCFLAGS $$NVCCINCLUDES $$LIBS -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
        cuda.dependency_type = TYPE_C
        QMAKE_EXTRA_COMPILERS += cuda
    }
    
    我正在尝试在linux上编译


    非常感谢您在这个主题上提供的帮助。

    我对qt或qmake一无所知。但是我认为链接器被以下事实绊倒了:你告诉
    nvcc
    --shared
    开关将
    libcudatest.cu
    编译成一个共享对象(通常在
    .so
    文件中),但你指定的输出文件是
    .o
    。尝试将您的
    libcudatest.o
    重命名为
    libcudatest.so
    ,然后重复带有该更改的链接命令:
    g++-m64-o cuda_编译_测试_2; libcudatest.so main.o-L/usr/lib/x86_64-linux-gnu-L/usr/local/cuda/lib64-lcudart-lcudatest-lQtGui-lQtCore-lpthread
    ,如果有效,然后它会确认。你能让它工作吗?我对qt或qmake一无所知。但是我认为链接器被以下事实绊倒了:你告诉
    nvcc
    --shared
    开关将
    libcudatest.cu
    编译成一个共享对象(通常在
    .so
    文件中),但你指定的输出文件是
    .o
    。尝试将您的
    libcudatest.o
    重命名为
    libcudatest.so
    ,然后重复带有该更改的链接命令:
    g++-m64-o cuda_编译_测试_2; libcudatest.so main.o-L/usr/lib/x86_64-linux-gnu-L/usr/local/cuda/lib64-lcudart-lcudatest-lQtGui-lQtCore-lpthread
    ,如果有效,然后它会确认。你能让它工作吗?