nvcc fatal : A single input file is required for a non-link phase when an outputfile is specified

参考:https://www.jianshu.com/p/1dc40d2b78c8

nvcc fatal : A single input file is required for a non-link phase when an outputfile is specified


具体的警告和报错是这样的:

CMake Warning (dev) in ad-census_generated_main.cu.o.cmake:
  Syntax Warning in cmake code at

    /home/xxx/softwares/AD-Census/build/CMakeFiles/ad-census.dir/ad-census_generated_main.cu.o.cmake:79:198

  Argument not separated from preceding token by whitespace.
This warning is for project developers.  Use -Wno-dev to suppress it.

nvcc fatal   : A single input file is required for a non-link phase when an outputfile is specified
CMake Error at ad-census_generated_main.cu.o.cmake:206 (message):
  Error generating
  /home/xxx/softwares/AD-Census/build/CMakeFiles/ad-census.dir//./ad-census_generated_main.cu.o

搜了一下,找到了可用的解决方案。来自https://github.com/PointCloudLibrary/pcl/issues/776
处理方法就是在控制CUDA和PCL编译的CMakeLists.txt当中加入如下代码:

get_directory_property(dir_defs DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS)
set(vtk_flags)
foreach(it ${dir_defs})
    if(it MATCHES "vtk*")
    list(APPEND vtk_flags ${it})
    endif()
endforeach()

举例来说,我的CMakeLists.txt原先是这样写的:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

PROJECT(AD-Census)

FIND_PACKAGE(PCL 1.2 REQUIRED)
FIND_PACKAGE(CUDA REQUIRED)
FIND_PACKAGE(OpenCV 3.0 REQUIRED)

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
SET(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-gencode arch=compute_61,code=sm_61;-std=c++11;)

INCLUDE_DIRECTORIES(${PCL_INCLUDE_DIRS}
    ./containers)

LINK_DIRECTORIES(${PCL_LIBRARY_DIRS}
    /usr/lib
    /usr/local/lib)


CUDA_ADD_EXECUTABLE(ad-census
    main.cu
    ./containers/device_memory.cpp
    ./containers/initialization.cpp
)

TARGET_LINK_LIBRARIES(ad-census
    ${OpenCV_LIBS}
    ${PCL_LIBRARIES})

那么就在其中加入上面的代码,变成:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

PROJECT(AD-Census)

FIND_PACKAGE(PCL 1.2 REQUIRED)
FIND_PACKAGE(CUDA REQUIRED)
FIND_PACKAGE(OpenCV 3.0 REQUIRED)

### 我放到了这里
get_directory_property(dir_defs DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS)
set(vtk_flags)
foreach(it ${dir_defs})
    if(it MATCHES "vtk*")
    list(APPEND vtk_flags ${it})
    endif()
endforeach()

foreach(d ${vtk_flags})
    remove_definitions(-D${d})
endforeach()
###

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
SET(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-gencode arch=compute_61,code=sm_61;-std=c++11;)

INCLUDE_DIRECTORIES(${PCL_INCLUDE_DIRS}
    ./containers)

LINK_DIRECTORIES(${PCL_LIBRARY_DIRS}
    /usr/lib
    /usr/local/lib)


CUDA_ADD_EXECUTABLE(ad-census
    main.cu
    ./containers/device_memory.cpp
    ./containers/initialization.cpp
)

TARGET_LINK_LIBRARIES(ad-census
    ${OpenCV_LIBS}
    ${PCL_LIBRARIES})


就可以了。



作者:an0nym0us
链接:https://www.jianshu.com/p/1dc40d2b78c8
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值