ссылки библиотеки qt5 автоматически передают дополнительный флаг fPIC компилятору nvcc по причине ошибки cmake - PullRequest
0 голосов
/ 18 мая 2019

У меня есть проект, основанный на cuda10.1, qt5.И я использую cmake для управления компиляцией.Однако тот же сценарий cmake хорошо работает в Windows, но в Linux я получил ошибку "Неизвестная опция 'fPIC'" при компиляции файлов .cu.Я смотрю в makefile, а затем обнаруживаю дополнительный флаг ошибки "-fPIC", передаваемый компилятору nvcc.Потратив часы на тестирование, я обнаружил, что связывание библиотек qt5 автоматически пройдет дополнительный флаг fPIC, который вызывает эту ошибку.Я не знаю, это ошибка или особенность cmake?

cmake_minimum_required(VERSION 3.10)   
project(PyPhysLeo LANGUAGES CXX CUDA)    

find_package(Qt5 COMPONENTS Core Widgets)        
if(Qt5_FOUND)
    message("Find QT5")
    link_libraries(Qt5::Widgets Qt5::Core Qt5::Gui)     
endif()

set(CMAKE_CXX_STANDARD 14 CACHE STRING "CXX STANDARD VERSION 11,14,17")          
set(CMAKE_POSITION_INDEPENDENT_CODE ON)        
set(CMAKE_CUDA_SEPARABLE_COMPILATION ON CACHE BOOL "DEFAULT SET SEPERABLE COMPILATION MODE") 
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -arch=sm_60") 

include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE})   

add_executable(test test.cu)

Если вы попробуете скрипт cmake выше с любым примером кода cuda, вы получите ошибку nvcc fatal, потому что она не распознает флаг fPIC.

1 Ответ

1 голос
/ 19 мая 2019

Это проблема с qt5.cmake.Спасибо @Robert Crovella за комментирование соответствующей информации gitlab.kitware.com / cmake / cmake / Issues / 16915 .Идеального решения для дивана не существует.Но, возможно, вы можете разделить ваш проект на библиотеку и исполняемый подпроект.Попробуйте поместить весь .cu файл в подпроект библиотеки и только ссылку qt5 в исполняемый подпроект.Это способ избежать этой проблемы.В противном случае вы можете попытаться изменить переменную, определенную qt5.cmake, пожалуйста, обратитесь к cmake Issue 16915 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...