Robotics StackExchange | Archived questions

catkin and cuda_add_library

Hi, I have the following error when I try to build a *.cu file using cudaaddlibrary. cudaaddlibrary works fine on normal cpp files though.

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

Portion of my verbose build is below. It seems like the nvcc build string for DenseTracking.cu is wrong. The same for so3.cpp looks fine. I have no problems on rosbuild though.

[ 30%] Building CXX object CMakeFiles/so_phus.dir/src/so_phus/so3.cpp.o
**/usr/bin/c++   -DBT_USE_DOUBLE_PRECISION -DCUDA_BUILD -DROS_PACKAGE_NAME=\"dwo_slam\" -Dso_phus_EXPORTS -O3 -fPIC -I/usr/local/include/opencv -I/usr/local/include -I/home/hope/Dropbox/office/catkin_ws/src/dwo_slam/include -I/opt/ros/hydro/include -I/opt/ros/hydro/include/opencv -I/usr/include/eigen3 -I/usr/include/suitesparse -I/home/hope/svslocal/include -I/usr/local/cuda/include -I/usr/local/cuda-5.5/include    -o CMakeFiles/so_phus.dir/src/so_phus/so3.cpp.o -c /home/hope/Dropbox/office/catkin_ws/src/dwo_slam/src/so_phus/so3.cpp
Linking CXX shared library devel/lib/libso_phus.so**
/usr/bin/cmake -E cmake_link_script CMakeFiles/so_phus.dir/link.txt --verbose=1
/usr/bin/c++  -fPIC -O3   -shared -Wl,-soname,libso_phus.so -o devel/lib/libso_phus.so CMakeFiles/so_phus.dir/src/so_phus/se3.cpp.o CMakeFiles/so_phus.dir/src/so_phus/so3.cpp.o /usr/local/cuda-5.5/lib64/libcudart.so -lcuda -Wl,-rpath,/usr/local/cuda-5.5/lib64 


[ 38%] Building NVCC (Device) object ./dwoSLAM_generated_DenseTracking.cu.o
/usr/bin/cmake -E make_directory /home/hope/Dropbox/office/catkin_ws/src/dwo_slam/.
/usr/bin/cmake -D verbose:BOOL=1 -D build_configuration:STRING= -D generated_file:STRING=/home/hope/Dropbox/office/catkin_ws/src/dwo_slam/./dwoSLAM_generated_DenseTracking.cu.o -D generated_cubin_file:STRING=/home/hope/Dropbox/office/catkin_ws/src/dwo_slam/./dwoSLAM_generated_DenseTracking.cu.o.cubin.txt -P /home/hope/Dropbox/office/catkin_ws/src/dwo_slam/CMakeFiles/dwoSLAM_generated_DenseTracking.cu.o.cmake
-- Removing /home/hope/Dropbox/office/catkin_ws/src/dwo_slam/./dwoSLAM_generated_DenseTracking.cu.o
/usr/bin/cmake -E remove /home/hope/Dropbox/office/catkin_ws/src/dwo_slam/./dwoSLAM_generated_DenseTracking.cu.o
-- Generating dependency file: /home/hope/Dropbox/office/catkin_ws/src/dwo_slam/CMakeFiles/dwoSLAM_generated_DenseTracking.cu.o.NVCC-depend
**/usr/local/cuda-5.5/bin/nvcc -M -D__CUDACC__ /home/hope/Dropbox/office/catkin_ws/src/dwo_slam/src/DenseTracking.cu -o /home/hope/Dropbox/office/catkin_ws/src/dwo_slam/CMakeFiles/dwoSLAM_generated_DenseTracking.cu.o.NVCC-depend -m64 -DROS_PACKAGE_NAME= dwo_slam\" -DCUDA_BUILD -DBT_USE_DOUBLE_PRECISION -DdwoSLAM_EXPORTS\" -Xcompiler ,\"-O3\",\"-fPIC\",\"-g\" -arch=sm_20 --use_fast_math -O3 -DNVCC -I/usr/local/cuda-5.5/include -I/usr/local/include/opencv -I/usr/local/include -I/home/hope/Dropbox/office/catkin_ws/src/dwo_slam/include -I/opt/ros/hydro/include -I/opt/ros/hydro/include/opencv -I/usr/include -I/usr/include/eigen3 -I/usr/include/suitesparse -I/home/hope/svslocal/include -I/usr/local/cuda/include -I/usr/local/cuda-5.5/include**
nvcc fatal   : A single input file is required for a non-link phase when an outputfile is specified
CMake Error at CMakeFiles/dwoSLAM_generated_DenseTracking.cu.o.cmake:198 (message):
  Error generating
  /home/hope/Dropbox/office/catkin_ws/src/dwo_slam/./dwoSLAM_generated_DenseTracking.cu.o

If I type in the following manually, there are no errors. Any suggestions on what is going on?

/usr/local/cuda-5.5/bin/nvcc -M -D_CUDACC_ /home/hope/Dropbox/office/catkin_ws/src/dwo_slam/src/DenseTracking.cu -o /home/hope/Dropbox/office/catkin_ws/src/dwo_slam/CMakeFiles/dwoSLAM_generated_DenseTracking.cu.o.NVCC-depend -m64 -DROS_PACKAGE_NAME=**\"dwo_slam\" -DCUDA_BUILD -DBT_USE_DOUBLE_PRECISION -DdwoSLAM_EXPORTS** -Xcompiler -O3 -fPIC -g** -arch=sm_20 --use_fast_math -O3 -DNVCC -I/usr/local/cuda-5.5/include -I/usr/local/include/opencv -I/usr/local/include -I/home/hope/Dropbox/office/catkin_ws/src/dwo_slam/include -I/opt/ros/hydro/include -I/opt/ros/hydro/include/opencv -I/usr/include -I/usr/include/eigen3 -I/usr/include/suitesparse -I/home/hope/svslocal/include -I/usr/local/cuda/include -I/usr/local/cuda-5.5/include

CMakeLists.txt - CMakeLists.txt

Asked by aswin on 2013-12-11 15:09:39 UTC

Comments

It would be helpful to see your CMakeLists.txt

Asked by William on 2013-12-11 17:38:44 UTC

Thank you for the edit! CMakelists - https://dl.dropboxusercontent.com/u/8948006/CMakeLists.txt

Asked by aswin on 2013-12-11 20:17:54 UTC

Could you perhaps include the contents of the file in your original question? The dropbox link is 404-ing for me.

Asked by gvdhoorn on 2013-12-11 23:01:42 UTC

updated in question

Asked by aswin on 2013-12-11 23:42:23 UTC

I don't see anything in particular that could be the problem, I would suggest printing out the variables in your library for loops you have and checking that they are all sane. I can't imagine what/how catkin could be interfering in this scenario.

Asked by William on 2013-12-12 11:13:50 UTC

I can compile the package with exact same options and code in rosbuild with no problem.

Asked by aswin on 2013-12-12 23:47:24 UTC

Have you tried:

cuda_compile( DENSE_TRACKING_O src/DenseTracking.cu ) cuda_add_library(dwoSLAM src/DenseTracker.cc

src/Frontend.cc ${DENSE_TRACKING_O} )

Worked for me, while adding all files to

Asked by Wolf on 2014-01-06 20:40:04 UTC

Answers