链接QT5库会自动将额外的FPIC标志传递给NVCC编译器,并通过cmake Cause错误
link qt5 libraries automatically pass extra fPIC flag to nvcc compiler by cmake cause error
我有一个基于cuda10.1,qt5的项目。我使用cmake管理编译。但是,相同的cmake脚本在Windows中效果很好,但是在Linux中,编译.cu文件时,我会出现错误"未知选项'fpic'"。我查看makefile,然后发现传递给NVCC编译器的额外错误标志" -fpic"。花费数小时的测试,我发现链接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)
如果您使用任何示例CUDA代码尝试上述CMAKE脚本,则会遇到" NVCC致命"错误,因为它无法识别FPIC标志。
这是qt5.cmake
的问题。感谢Robert Crovella对相关信息gitlab.kitware.com/cmake/cmake/cmake/issues/16915的评论(见上文(。到目前为止,还没有完美的解决方案。但是...
-
一个解决方案,如果您可以将项目分为库和可执行的子项目,那么您可以完全避免问题。尝试将所有.cu文件放在库子项目中,而仅将QT5链接到可执行的子项目中。这是避免此问题的一种方法。
-
否则,您可以尝试修改由
qt5.cmake
定义的变量,有关该解决方案,请参阅CMAKE问题16915。
相关文章:
- C/C++编译器通常会删除重复的库吗
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- Win32编译器选项和内存分配
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++,我收到一个无法理解的编译器错误
- 在线编译器中的分段C++没有打印消息
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- C/C++预处理器是否可以检测一些编译器选项
- 如何将编译器标志从 clang 传递给 nvcc
- 链接QT5库会自动将额外的FPIC标志传递给NVCC编译器,并通过cmake Cause错误
- Cuda NVCC 编译器 - 如何 /showinclude.
- 使用Friend Sub类中的私有方法 - NVCC中的编译器错误
- CUDA NVCC 编译器错误
- NVCC编译器找不到随机库
- 如何在ns3中使用nvcc作为编译器
- _Cuda(NVCC)编译器的ITERATOR_DEBUG_LEVEL
- 无法在 nsight eclipse 中添加 nvcc 的编译器选项
- 有人能让NVCC和英特尔编译器一起工作吗?
- 当使用英特尔编译器和 -std=c++11 标志时,NVCC 不起作用