NVIDIA / cccl

CUDA C++ Core Libraries
Other
940 stars 116 forks source link

[BUG]: build errors with multiple definitions of #1807

Closed ZJLi2013 closed 3 weeks ago

ZJLi2013 commented 3 weeks ago

Is this a duplicate?

Type of Bug

Compile-time Error

Component

CUB

Describe the bug

p.o
[100%] Building CUDA object test/CMakeFiles/cub.cpp14.catch2_test.lid_0.dir/catch2_runner_helper.cu.o
[100%] Linking CXX executable ../bin/cub.cpp14.catch2_test.lid_0
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `mersenne::init_genrand(unsigned int)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:289: multiple definition of `mersenne::init_genrand(unsigned int)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/mersenne.h:63: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `mersenne::init_by_array(unsigned int*, int)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:289: multiple definition of `mersenne::init_by_array(unsigned int*, int)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/mersenne.h:84: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `mersenne::genrand_int32()':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:289: multiple definition of `mersenne::genrand_int32()'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/mersenne.h:123: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `TotalGlobalMem()':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:82: multiple definition of `TotalGlobalMem()'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:358: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `bool IsNaN<float>(float)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:289: multiple definition of `bool IsNaN<float>(float)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:380: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `bool IsNaN<float1>(float1)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:82: multiple definition of `bool IsNaN<float1>(float1)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:386: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `bool IsNaN<float2>(float2)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_condition.inl:48: multiple definition of `bool IsNaN<float2>(float2)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:392: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `bool IsNaN<float3>(float3)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:289: multiple definition of `bool IsNaN<float3>(float3)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:398: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `bool IsNaN<float4>(float4)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:289: multiple definition of `bool IsNaN<float4>(float4)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:404: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `bool IsNaN<double>(double)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:82: multiple definition of `bool IsNaN<double>(double)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:410: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `bool IsNaN<double1>(double1)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:289: multiple definition of `bool IsNaN<double1>(double1)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:416: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `bool IsNaN<double2>(double2)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:82: multiple definition of `bool IsNaN<double2>(double2)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:422: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `bool IsNaN<double3>(double3)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:289: multiple definition of `bool IsNaN<double3>(double3)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:428: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `bool IsNaN<double4>(double4)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:82: multiple definition of `bool IsNaN<double4>(double4)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:434: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `bool IsNaN<half_t>(half_t)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:289: multiple definition of `bool IsNaN<half_t>(half_t)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:441: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `bool IsNaN<bfloat16_t>(bfloat16_t)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_condition.inl:48: multiple definition of `bool IsNaN<bfloat16_t>(bfloat16_t)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:452: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `operator<<(std::ostream&, TestFoo const&)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:289: multiple definition of `operator<<(std::ostream&, TestFoo const&)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:956: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `operator<<(std::ostream&, TestBar const&)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:289: multiple definition of `operator<<(std::ostream&, TestBar const&)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:1092: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `CompareDeviceResults(cub::CUB_200500_890_NS::NullType*, cub::CUB_200500_890_NS::NullType*, unsigned long, bool, bool)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:289: multiple definition of `CompareDeviceResults(cub::CUB_200500_890_NS::NullType*, cub::CUB_200500_890_NS::NullType*, unsigned long, bool, bool)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:1229: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o: in function `DisplayResults(cub::CUB_200500_890_NS::NullType*, unsigned long)':
/workspace/cccl/thrust/thrust/cmake/../../thrust/system/detail/error_category.inl:82: multiple definition of `DisplayResults(cub::CUB_200500_890_NS::NullType*, unsigned long)'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:1346: first defined here
/usr/bin/ld: CMakeFiles/cub.cpp14.test.printing.dir/catch2_test_printing.cu.o:/workspace/cccl/cub/test/test_util.h:370: multiple definition of `g_num_rand_samples'; CMakeFiles/cub.cpp14.test.device_histogram.lid_0.dir/catch2_test_device_histogram.cu.o:/workspace/cccl/cub/test/test_util.h:370: first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [test/CMakeFiles/cub.cpp14.catch2_test.lid_0.dir/build.make:442: bin/cub.cpp14.catch2_test.lid_0] Error 1
make[1]: *** [CMakeFiles/Makefile2:2232: test/CMakeFiles/cub.cpp14.catch2_test.lid_0.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[100%] Built target cub.cpp14.test.device_segmented_sort_pairs.lid_1
make: *** [Makefile:146: all] Error 2

How to Reproduce

git clone https://github.com/nvidia/cccl && cd cccl/cub 
mkdir build && cd build 
cmake .. -DCMAKE_CUDA_ARCHITECTURES=89 -DCMAKE_INSTALL_PREFIX=/usr/local/cub
make -j32 & make install

Expected behavior

build successfully

Reproduction link

No response

Operating System

ubuntu 22.04

nvidia-smi output

+---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.98 Driver Version: 535.98 CUDA Version: 12.3 | |-----------------------------------------+----------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 NVIDIA GeForce RTX 4090 Off | 00000000:21:00.0 Off | Off | | 0% 39C P8 26W / 450W | 46MiB / 24564MiB | 0% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+

NVCC version

Cuda compilation tools, release 12.3, V12.3.52

bernhardmgruber commented 3 weeks ago

Thanks for reporting this! Since I added this test a couple of days ago, I will have a look!

bernhardmgruber commented 3 weeks ago

The issue is caused because catch2_test_device_histogram.cu and catch2_test_printing.cu both including test_util.h and several functions in this header lack the necessary inline specifiers.