Build fails with 'undefined reference' linker error on CUDA 13.0
CUDA 13.0 introduces breaking symbol default visibility changes resulting in linker errors not finding some symbols. The changes are described in this post: CUDA C++ Compiler Updates Impacting ELF Visibility and Linkage.
Workaround
As suggested in above blog post, the old behavior can be brought back with an NVCC flag until it is fixed in the pytorch3d source.
NVCC_FLAGS="-static-global-template-stub=false" pip install git+https://github.com/facebookresearch/pytorch3d.git@stable
Error Reproduction
In an ubuntu 24.04 docker image like nvcr.io/nvidia/cuda:13.0.1-devel-ubuntu24.04
docker run --rm -it nvcr.io/nvidia/cuda:13.0.1-devel-ubuntu24.04 bash
apt update && apt install python3.12 python3.12-venv
python3 -m venv testenv
source testenv/bin/activate
pip install https://download.pytorch.org/whl/cu130/torch-2.9.0%2Bcu130-cp312-cp312-manylinux_2_28_x86_64.whl
pip install --no-build-isolation git+https://github.com/facebookresearch/pytorch3d.git@stable
Error log:
aarch64-linux-gnu-g++ -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O2 -Wall -shared -Wl,-O1 -Wl,-Bsymbolic-functions /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/ball_query/ball_query.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/ball_query/ball_query_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/blending/sigmoid_alpha_blend.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/blending/sigmoid_alpha_blend_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/compositing/alpha_composite.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/compositing/alpha_composite_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/compositing/norm_weighted_sum.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/compositing/norm_weighted_sum_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/compositing/weighted_sum.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/compositing/weighted_sum_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/ext.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/face_areas_normals/face_areas_normals.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/face_areas_normals/face_areas_normals_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/gather_scatter/gather_scatter.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/gather_scatter/gather_scatter_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/interp_face_attrs/interp_face_attrs.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/iou_box3d/iou_box3d.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/iou_box3d/iou_box3d_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/knn/knn.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/knn/knn_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/marching_cubes/marching_cubes.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/marching_cubes/marching_cubes_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/mesh_normal_consistency/mesh_normal_consistency_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/packed_to_padded_tensor/packed_to_padded_tensor.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/packed_to_padded_tensor/packed_to_padded_tensor_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/point_mesh/point_mesh_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/point_mesh/point_mesh_cuda.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/points_to_volumes/points_to_volumes.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/points_to_volumes/points_to_volumes_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.backward.gpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.backward_dbg.gpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.calc_gradients.gpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.calc_signature.gpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.construct.gpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.create_selector.gpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.destruct.gpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.fill_bg.gpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.forward.gpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.norm_cam_gradients.gpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.norm_sphere_gradients.gpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.render.gpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/host/renderer.backward.cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/host/renderer.backward_dbg.cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/host/renderer.calc_gradients.cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/host/renderer.calc_signature.cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/host/renderer.construct.cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/host/renderer.create_selector.cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/host/renderer.destruct.cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/host/renderer.fill_bg.cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/host/renderer.forward.cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/host/renderer.norm_cam_gradients.cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/host/renderer.norm_sphere_gradients.cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/host/renderer.render.cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/pytorch/camera.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/pytorch/renderer.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/pytorch/tensor_util.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/pytorch/util.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/warnings.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/rasterize_coarse/rasterize_coarse.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/rasterize_meshes/rasterize_meshes.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/rasterize_meshes/rasterize_meshes_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/rasterize_points/rasterize_points.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/rasterize_points/rasterize_points_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/sample_farthest_points/sample_farthest_points.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/sample_farthest_points/sample_farthest_points_cpu.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/sample_pdf/sample_pdf.o /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/sample_pdf/sample_pdf_cpu.o -L/root/.cache/pypoetry/virtualenvs/lyte-docker-xS3fZVNL-py3.12/lib/python3.12/site-packages/torch/lib -L/usr/local/cuda/lib64 -L/usr/lib/aarch64-linux-gnu -lc10 -ltorch -ltorch_cpu -ltorch_python -lcudart -lc10_cuda -ltorch_cuda -o build/lib.linux-aarch64-cpython-312/pytorch3d/_C.cpython-312-aarch64-linux-gnu.so
/usr/bin/ld: /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.backward.gpu.o: in function `void pulsar::Renderer::backward<true>(pulsar::Renderer::Renderer*, float const*, float const*, float const*, float const*, float const*, float const*, pulsar::CamInfo const&, float const&, float, unsigned int const&, float const*, unsigned long const&, unsigned int const&, bool const&, bool const&, bool const&, bool const&, bool const&, CUstream_st*)':
tmpxft_000011d2_00000000-6_renderer.backward.gpu.cudafe1.cpp:(.text._ZN6pulsar8Renderer8backwardILb1EEEvPNS0_8RendererEPKfS5_S5_S5_S5_S5_RKNS_7CamInfoERS4_fRKjS5_RKmSB_RKbSF_SF_SF_SF_P11CUstream_st[_ZN6pulsar8Renderer8backwardILb1EEEvPNS0_8RendererEPKfS5_S5_S5_S5_S5_RKNS_7CamInfoERS4_fRKjS5_RKmSB_RKbSF_SF_SF_SF_P11CUstream_st]+0x7ec): undefined reference to `void pulsar::Renderer::calc_signature<true>(pulsar::Renderer::Renderer, float3 const*, float const*, float const*, unsigned int)'
/usr/bin/ld: tmpxft_000011d2_00000000-6_renderer.backward.gpu.cudafe1.cpp:(.text._ZN6pulsar8Renderer8backwardILb1EEEvPNS0_8RendererEPKfS5_S5_S5_S5_S5_RKNS_7CamInfoERS4_fRKjS5_RKmSB_RKbSF_SF_SF_SF_P11CUstream_st[_ZN6pulsar8Renderer8backwardILb1EEEvPNS0_8RendererEPKfS5_S5_S5_S5_S5_RKNS_7CamInfoERS4_fRKjS5_RKmSB_RKbSF_SF_SF_SF_P11CUstream_st]+0xbd0): undefined reference to `void pulsar::Renderer::calc_gradients<true>(pulsar::CamInfo, float const*, float, float3 const*, float const*, float const*, float const*, unsigned int, float const*, float const*, pulsar::Renderer::DrawInfo const*, pulsar::Renderer::IntersectInfo const*, bool, bool, bool, bool, bool, float*, float*, float3*, pulsar::CamGradInfo*, float*, int*, int, unsigned int, unsigned int)'
/usr/bin/ld: tmpxft_000011d2_00000000-6_renderer.backward.gpu.cudafe1.cpp:(.text._ZN6pulsar8Renderer8backwardILb1EEEvPNS0_8RendererEPKfS5_S5_S5_S5_S5_RKNS_7CamInfoERS4_fRKjS5_RKmSB_RKbSF_SF_SF_SF_P11CUstream_st[_ZN6pulsar8Renderer8backwardILb1EEEvPNS0_8RendererEPKfS5_S5_S5_S5_S5_RKNS_7CamInfoERS4_fRKjS5_RKmSB_RKbSF_SF_SF_SF_P11CUstream_st]+0xcfc): undefined reference to `void pulsar::Renderer::norm_sphere_gradients<true>(pulsar::Renderer::Renderer, int)'
/usr/bin/ld: tmpxft_000011d2_00000000-6_renderer.backward.gpu.cudafe1.cpp:(.text._ZN6pulsar8Renderer8backwardILb1EEEvPNS0_8RendererEPKfS5_S5_S5_S5_S5_RKNS_7CamInfoERS4_fRKjS5_RKmSB_RKbSF_SF_SF_SF_P11CUstream_st[_ZN6pulsar8Renderer8backwardILb1EEEvPNS0_8RendererEPKfS5_S5_S5_S5_S5_RKNS_7CamInfoERS4_fRKjS5_RKmSB_RKbSF_SF_SF_SF_P11CUstream_st]+0xeec): undefined reference to `void pulsar::Renderer::norm_cam_gradients<true>(pulsar::Renderer::Renderer)'
/usr/bin/ld: /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.backward_dbg.gpu.o: in function `void pulsar::Renderer::backward_dbg<true>(pulsar::Renderer::Renderer*, float const*, float const*, float const*, float const*, float const*, float const*, pulsar::CamInfo const&, float const&, float, unsigned int const&, float const*, unsigned long const&, unsigned int const&, bool const&, bool const&, bool const&, bool const&, bool const&, unsigned int const&, unsigned int const&, CUstream_st*)':
tmpxft_0000128d_00000000-6_renderer.backward_dbg.gpu.cudafe1.cpp:(.text._ZN6pulsar8Renderer12backward_dbgILb1EEEvPNS0_8RendererEPKfS5_S5_S5_S5_S5_RKNS_7CamInfoERS4_fRKjS5_RKmSB_RKbSF_SF_SF_SF_SB_SB_P11CUstream_st[_ZN6pulsar8Renderer12backward_dbgILb1EEEvPNS0_8RendererEPKfS5_S5_S5_S5_S5_RKNS_7CamInfoERS4_fRKjS5_RKmSB_RKbSF_SF_SF_SF_SB_SB_P11CUstream_st]+0x8a8): undefined reference to `void pulsar::Renderer::calc_signature<true>(pulsar::Renderer::Renderer, float3 const*, float const*, float const*, unsigned int)'
/usr/bin/ld: tmpxft_0000128d_00000000-6_renderer.backward_dbg.gpu.cudafe1.cpp:(.text._ZN6pulsar8Renderer12backward_dbgILb1EEEvPNS0_8RendererEPKfS5_S5_S5_S5_S5_RKNS_7CamInfoERS4_fRKjS5_RKmSB_RKbSF_SF_SF_SF_SB_SB_P11CUstream_st[_ZN6pulsar8Renderer12backward_dbgILb1EEEvPNS0_8RendererEPKfS5_S5_S5_S5_S5_RKNS_7CamInfoERS4_fRKjS5_RKmSB_RKbSF_SF_SF_SF_SB_SB_P11CUstream_st]+0xcac): undefined reference to `void pulsar::Renderer::calc_gradients<true>(pulsar::CamInfo, float const*, float, float3 const*, float const*, float const*, float const*, unsigned int, float const*, float const*, pulsar::Renderer::DrawInfo const*, pulsar::Renderer::IntersectInfo const*, bool, bool, bool, bool, bool, float*, float*, float3*, pulsar::CamGradInfo*, float*, int*, int, unsigned int, unsigned int)'
/usr/bin/ld: /tmp/pip-req-build-nj5pu1g5/build/temp.linux-aarch64-cpython-312/tmp/pip-req-build-nj5pu1g5/pytorch3d/csrc/pulsar/gpu/renderer.forward.gpu.o: in function `void pulsar::Renderer::forward<true>(pulsar::Renderer::Renderer*, float const*, float const*, float const*, pulsar::CamInfo const&, float const&, float, unsigned int const&, float const*, float const*, unsigned long const&, unsigned int const&, CUstream_st*)':
tmpxft_0000151a_00000000-6_renderer.forward.gpu.cudafe1.cpp:(.text._ZN6pulsar8Renderer7forwardILb1EEEvPNS0_8RendererEPKfS5_S5_RKNS_7CamInfoERS4_fRKjS5_S5_RKmSB_P11CUstream_st[_ZN6pulsar8Renderer7forwardILb1EEEvPNS0_8RendererEPKfS5_S5_RKNS_7CamInfoERS4_fRKjS5_S5_RKmSB_P11CUstream_st]+0x82c): undefined reference to `void pulsar::Renderer::calc_signature<true>(pulsar::Renderer::Renderer, float3 const*, float const*, float const*, unsigned int)'
/usr/bin/ld: tmpxft_0000151a_00000000-6_renderer.forward.gpu.cudafe1.cpp:(.text._ZN6pulsar8Renderer7forwardILb1EEEvPNS0_8RendererEPKfS5_S5_RKNS_7CamInfoERS4_fRKjS5_S5_RKmSB_P11CUstream_st[_ZN6pulsar8Renderer7forwardILb1EEEvPNS0_8RendererEPKfS5_S5_RKNS_7CamInfoERS4_fRKjS5_S5_RKmSB_P11CUstream_st]+0xd00): undefined reference to `void pulsar::Renderer::create_selector<true>(pulsar::Renderer::IntersectInfo const*, unsigned int, int, int, int, int, char*)'
/usr/bin/ld: tmpxft_0000151a_00000000-6_renderer.forward.gpu.cudafe1.cpp:(.text._ZN6pulsar8Renderer7forwardILb1EEEvPNS0_8RendererEPKfS5_S5_RKNS_7CamInfoERS4_fRKjS5_S5_RKmSB_P11CUstream_st[_ZN6pulsar8Renderer7forwardILb1EEEvPNS0_8RendererEPKfS5_S5_RKNS_7CamInfoERS4_fRKjS5_S5_RKmSB_P11CUstream_st]+0x3b08): undefined reference to `void pulsar::Renderer::render<true>(unsigned long const*, pulsar::Renderer::IntersectInfo const*, pulsar::Renderer::DrawInfo const*, float const*, int const*, float const*, pulsar::CamInfo, float, float, unsigned int, float const*, unsigned int, int, int, int, int, float*, float*, int)'
/usr/bin/ld: tmpxft_0000151a_00000000-6_renderer.forward.gpu.cudafe1.cpp:(.text._ZN6pulsar8Renderer7forwardILb1EEEvPNS0_8RendererEPKfS5_S5_RKNS_7CamInfoERS4_fRKjS5_S5_RKmSB_P11CUstream_st[_ZN6pulsar8Renderer7forwardILb1EEEvPNS0_8RendererEPKfS5_S5_RKNS_7CamInfoERS4_fRKjS5_S5_RKmSB_P11CUstream_st]+0x3d74): undefined reference to `void pulsar::Renderer::fill_bg<true>(pulsar::Renderer::Renderer, pulsar::CamInfo, float const*, float, unsigned int)'
/usr/bin/ld: build/lib.linux-aarch64-cpython-312/pytorch3d/_C.cpython-312-aarch64-linux-gnu.so: hidden symbol `_ZN6pulsar8Renderer7fill_bgILb1EEEvNS0_8RendererENS_7CamInfoEPKffj' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
error: command '/usr/bin/aarch64-linux-gnu-g++' failed with exit code 1
now their nightly version only supports CUDA 12.8, not 13.0. we have to wait for their update
uv pip install pytorch3d
× No solution found when resolving dependencies:
╰─▶ Because all versions of pytorch3d have no wheels with a matching Python ABI tag (e.g., cp312) and you require pytorch3d, we can
conclude that your requirements are unsatisfiable.
hint: You require CPython 3.12 (`cp312`), but we only found wheels for `pytorch3d` (v0.7.4) with the following Python ABI tags:
`cp38`, `cp39`, `cp310`