【问题标题】:link qt5 libraries automatically pass extra fPIC flag to nvcc compiler by cmake cause error链接 qt5 库通过 cmake 自动将额外的 fPIC 标志传递给 nvcc 编译器导致错误
【发布时间】:2019-05-18 13:57:31
【问题描述】:

我有一个基于cuda10.1,qt5的项目。我使用 cmake 来管理编译。然而,相同的 cmake 脚本在 Windows 中运行良好,但在 Linux 中,编译 .cu 文件时出现错误“Unknown option 'fPIC'”。我查看了makefile,然后发现有一个额外的错误标志“-fPIC”传递给了nvcc编译器。经过数小时的测试,我发现链接 qt5 库会自动传递导致此错误的额外 fPIC 标志。不知道这是cmake的bug还是特性?

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)

如果您使用任何示例 cuda 代码尝试上述 cmake 脚本,您将收到“nvcc fatal”错误,因为它无法识别 fPIC 标志。

【问题讨论】:

标签: c++ qt cmake cuda


【解决方案1】:

qt5.cmake 有问题。感谢 Robert Crovella 对gitlab.kitware.com/cmake/cmake/issues/16915 的相关信息发表评论(见上文)。目前还没有完美的解决方案。但是……

  1. 一个解决方案,如果你可以将你的项目分成一个库和一个可执行的子项目,那么你可以完全避免这个问题。尝试将所有 .cu 文件放在库子项目中,并且仅将 qt5 链接到可执行子项目中。这是避免此问题的一种方法。

  2. 否则,您可以尝试修改qt5.cmake定义的变量,解决方法请参考cmake issue 16915

【讨论】:

  • 我得出了同样的结论:将我的项目分成两个独立的部分,一个有 Qt,一个没有。
猜你喜欢
  • 2020-04-12
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多