NVIDIA / NVIDIA/cuvs

[BUG] [java] documented build steps for Java fail: "GPUInfoProviderImpl.java:[105,24] cannot find symbol"

Open
#2,252 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Cuda
Stars
854
Forks
236
Avg merge
3d 3h
Merged PRs (30d)
62

Description

Describe the bug

I tried to build the Java bindings locally today, on an x86_64 Linux machine.

Found that the build failed like this:

$ ./build.sh clean libcuvs java
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /home/jlamb/repos/cuvs/java/cuvs-java/src/main/java22/com/nvidia/cuvs/spi/JDKProvider.java:[10,1] cannot find symbol
  symbol:   static cudaStreamSynchronize
  location: class com.nvidia.cuvs.internal.panama.headers_h_1
[ERROR] /home/jlamb/repos/cuvs/java/cuvs-java/src/main/java22/com/nvidia/cuvs/internal/GPUInfoProviderImpl.java:[36,27] cannot find symbol
  symbol:   method cudaGetDeviceCount(java.lang.foreign.MemorySegment)
  location: class com.nvidia.cuvs.internal.GPUInfoProviderImpl.AvailableGpuInitializer
[ERROR] /home/jlamb/repos/cuvs/java/cuvs-java/src/main/java22/com/nvidia/cuvs/internal/GPUInfoProviderImpl.java:[93,22] cannot find symbol
  symbol:   method cudaGetDevice(java.lang.foreign.MemorySegment)
  location: class com.nvidia.cuvs.internal.GPUInfoProviderImpl
[ERROR] /home/jlamb/repos/cuvs/java/cuvs-java/src/main/java22/com/nvidia/cuvs/internal/GPUInfoProviderImpl.java:[97,24] cannot find symbol
  symbol:   method cudaSetDevice(int)
  location: class com.nvidia.cuvs.internal.GPUInfoProviderImpl
[ERROR] /home/jlamb/repos/cuvs/java/cuvs-java/src/main/java22/com/nvidia/cuvs/internal/GPUInfoProviderImpl.java:[105,24] cannot find symbol
  symbol:   method cudaSetDevice(int)
  location: class com.nvidia.cuvs.internal.GPUInfoProviderImpl

Steps/Code to reproduce bug

Checked out the latest commit on main (https://github.com/rapidsai/cuvs/commit/9ae6f93f62f77449df9eaac41409ce76e78f4bcf), and cleaned all prior build artifacts to ensure I had a clean starting state.

git checkout main
git pull upstream main
git clean -d -f -X

Created a conda environment with the CTK and other build dependencies.

conda create \
  --name cuvs-dev \
  --yes \
  --file ./conda/environments/all_cuda-133_arch-x86_64.yaml

source activate cuvs-dev

Then followed the docs and built with build.sh

./build.sh clean libcuvs java

https://github.com/rapidsai/cuvs/blob/9ae6f93f62f77449df9eaac41409ce76e78f4bcf/java/README.md#L19

Expected behavior

Expected to be able to build the Java bindings locally.

Environment details (please complete the following information):

Bare-metal on a local workstation.

environment details (click me)
$ nvidia-smi
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 590.48.01              Driver Version: 590.48.01      CUDA Version: 13.1     |
+-----------------------------------------+------------------------+----------------------+
| 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 RTX A6000               Off |   00000000:01:00.0  On |                  Off |
| 30%   40C    P8             27W /  300W |    1305MiB /  49140MiB |      3%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

$ java -version
openjdk version "22.0.2" 2024-07-16
OpenJDK Runtime Environment (build 22.0.2+9-70)
OpenJDK 64-Bit Server VM (build 22.0.2+9-70, mixed mode, sharing)

$ mvn -version
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /home/jlamb/.asdf/installs/maven/3.9.9
Java version: 22.0.2, vendor: Oracle Corporation, runtime: /home/jlamb/.asdf/installs/java/openjdk-22.0.2
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "6.17.0-29-generic", arch: "amd64", family: "unix"

$ conda env export
name: cuvs-dev
channels:
  - conda-forge
  - rapidsai-nightly
dependencies:
  - _go_select=2.3.0=cgo
  - _openmp_mutex=4.5=20_gnu
  - _python_abi3_support=1.0=hd8ed1ab_2
  - attrs=26.1.0=pyhcf101f3_0
  - binutils=2.45.1=default_h4852527_102
  - binutils_impl_linux-64=2.45.1=default_hfdba357_102
  - binutils_linux-64=2.45.1=default_h4852527_102
  - bzip2=1.0.8=hda65f42_9
  - c-ares=1.34.6=hb03c661_0
  - c-compiler=1.11.0=h4d9bdce_0
  - ca-certificates=2026.6.17=hbd8a1cb_0
  - cffi=2.0.0=py314h4a8dc5f_1
  - cfgv=3.5.0=pyhd8ed1ab_0
  - clang=20.1.8=default_cfg_hcbb2b3e_16
  - clang-20=20.1.8=default_h99862b1_16
  - clang-format=20.1.8=default_h99862b1_16
  - clang-format-20=20.1.8=default_h99862b1_16
  - clang-tools=20.1.8=default_h57a47db_16
  - clang_impl_linux-64=20.1.8=default_cfg_h027053c_16
  - cmake=4.3.4=hc85cc9f_0
  - colorama=0.4.6=pyhd8ed1ab_1
  - compiler-rt=20.1.8=hb700be7_1
  - compiler-rt_linux-64=20.1.8=hffcefe0_1
  - coverage=7.14.2=py314h67df5f8_0
  - cpython=3.14.6=py314hd8ed1ab_100
  - cuda-bindings=13.3.1=py314h42812f9_1
  - cuda-cccl_linux-64=13.3.3.3.1=ha770c72_0
  - cuda-core=1.0.1=cuda13_py314h025f531_0
  - cuda-crt-dev_linux-64=13.3.33=ha770c72_0
  - cuda-crt-tools=13.3.33=ha770c72_0
  - cuda-cudart=13.3.29=hecca717_0
  - cuda-cudart-dev=13.3.29=hecca717_0
  - cuda-cudart-dev_linux-64=13.3.29=h376f20c_0
  - cuda-cudart-static=13.3.29=hecca717_0
  - cuda-cudart-static_linux-64=13.3.29=h376f20c_0
  - cuda-cudart_linux-64=13.3.29=h376f20c_0
  - cuda-driver-dev_linux-64=13.3.29=h376f20c_0
  - cuda-nvcc=13.3.33=hcdd1206_0
  - cuda-nvcc-dev_linux-64=13.3.33=he91c749_0
  - cuda-nvcc-impl=13.3.33=h85509e4_0
  - cuda-nvcc-tools=13.3.33=he02047a_0
  - cuda-nvcc_linux-64=13.3.33=hb2fc203_0
  - cuda-nvrtc=13.3.33=hecca717_0
  - cuda-nvrtc-dev=13.3.33=hecca717_0
  - cuda-nvtx=13.3.29=hecca717_0
  - cuda-nvtx-dev=13.3.29=ha770c72_0
  - cuda-nvvm-dev_linux-64=13.3.33=ha770c72_0
  - cuda-nvvm-impl=13.3.33=h4bc722e_0
  - cuda-nvvm-tools=13.3.33=h4bc722e_0
  - cuda-pathfinder=1.5.5=pyhc364b38_0
  - cuda-profiler-api=13.3.27=h7938cbb_0
  - cuda-python=13.3.1=py_min_310_1
  - cuda-version=13.3=hcbadf70_3
  - cupy=14.1.1=py314hdea9c46_0
  - cupy-core=14.1.1=py314hcd3b49b_0
  - cxx-compiler=1.11.0=hfcd1e18_0
  - cython=3.2.5=py314h1807b08_0
  - distlib=0.4.3=pyhcf101f3_0
  - dlpack=0.8=h59595ed_3
  - exceptiongroup=1.3.1=pyhd8ed1ab_0
  - filelock=3.29.4=pyhd8ed1ab_0
  - gcc=14.3.0=h6f77f03_19
  - gcc_impl_linux-64=14.3.0=h235f0fe_19
  - gcc_linux-64=14.3.0=h50e9bb6_27
  - go=1.26.4=h282a287_0
  - gxx=14.3.0=h76987e4_19
  - gxx_impl_linux-64=14.3.0=h2185e75_19
  - gxx_linux-64=14.3.0=hd240bd5_27
  - icu=78.3=h33c6efd_0
  - identify=2.6.19=pyhd8ed1ab_0
  - importlib-metadata=9.0.0=pyhcf101f3_0
  - importlib-resources=7.1.0=pyhd8ed1ab_0
  - importlib_resources=7.1.0=pyhd8ed1ab_0
  - iniconfig=2.3.0=pyhd8ed1ab_0
  - joblib=1.5.3=pyhd8ed1ab_0
  - jsonschema=4.26.0=pyhcf101f3_0
  - jsonschema-specifications=2025.9.1=pyhcf101f3_0
  - kernel-headers_linux-64=4.18.0=he073ed8_9
  - keyutils=1.6.3=hb9d3cd8_0
  - krb5=1.22.2=hbde042b_1
  - ld_impl_linux-64=2.45.1=default_hbd61a6d_102
  - libabseil=20260107.1=cxx17_h7b12aa8_0
  - libblas=3.11.0=8_h4a7cf45_openblas
  - libbrotlicommon=1.2.0=hb03c661_1
  - libbrotlidec=1.2.0=hb03c661_1
  - libbrotlienc=1.2.0=hb03c661_1
  - libcap=2.78=hd0affe5_0
  - libcblas=3.11.0=8_h0358290_openblas
  - libclang=20.1.8=default_h99862b1_16
  - libclang-cpp20.1=20.1.8=default_h99862b1_16
  - libclang13=20.1.8=default_h746c552_16
  - libcublas=13.5.1.27=h676940d_0
  - libcublas-dev=13.5.1.27=h676940d_0
  - libcufft=12.3.0.29=hecca717_0
  - libcufile=1.18.0.66=h85c024f_0
  - libcurand=10.4.3.29=h676940d_0
  - libcurand-dev=10.4.3.29=h676940d_0
  - libcurl=8.20.0=hcf29cc6_0
  - libcusolver=12.2.2.18=h676940d_0
  - libcusolver-dev=12.2.2.18=h676940d_0
  - libcusparse=12.8.1.7=hecca717_0
  - libcusparse-dev=12.8.1.7=hecca717_0
  - libedit=3.1.20250104=pl5321h7949ede_0
  - libev=4.33=hd590300_2
  - libexpat=2.8.1=hecca717_1
  - libffi=3.5.2=h3435931_0
  - libgcc=15.2.0=he0feb66_19
  - libgcc-devel_linux-64=14.3.0=hf649bbc_119
  - libgcc-ng=15.2.0=h69a702a_19
  - libgfortran=15.2.0=h69a702a_19
  - libgfortran5=15.2.0=h68bc16d_19
  - libgomp=15.2.0=he0feb66_19
  - libiconv=1.18=h3b78370_2
  - liblapack=3.11.0=8_h47877c9_openblas
  - libllvm20=20.1.8=hf7376ad_1
  - liblzma=5.8.3=hb03c661_0
  - libmpdec=4.0.0=hb03c661_1
  - libnghttp2=1.68.1=h877daf1_0
  - libnl=3.11.0=hb9d3cd8_0
  - libnvfatbin=13.3.29=hecca717_0
  - libnvjitlink=13.3.33=hecca717_0
  - libnvjitlink-dev=13.3.33=hecca717_0
  - libnvptxcompiler-dev=13.3.33=ha770c72_0
  - libnvptxcompiler-dev_linux-64=13.3.33=ha770c72_0
  - libopenblas=0.3.33=pthreads_h94d23a6_0
  - libraft=26.08.00a32=cuda13_260622_1dde2731
  - libraft-headers=26.08.00a32=cuda13_260622_1dde2731
  - libraft-headers-only=26.08.00a32=cuda13_260622_1dde2731
  - librmm=26.08.00a39=cuda13_260622_a4ab3990
  - libsanitizer=14.3.0=h8f1669f_19
  - libsqlite=3.53.2=h0c1763c_0
  - libssh2=1.11.1=hcf80075_0
  - libstdcxx=15.2.0=h934c35e_19
  - libstdcxx-devel_linux-64=14.3.0=h9f08a49_119
  - libstdcxx-ng=15.2.0=hdf11a46_19
  - libsystemd0=260.2=h6f4a2f1_1
  - libucxx=0.51.00a31=cuda13_260622_ef40c362
  - libudev1=260.2=h6f4a2f1_1
  - libuuid=2.42.2=h5347b49_0
  - libuv=1.52.1=h280c20c_0
  - libxml2=2.15.3=h49c6c72_0
  - libxml2-16=2.15.3=hca6bf5a_0
  - libzlib=1.3.2=h25fd6f3_2
  - llvm-openmp=22.1.8=h4922eb0_0
  - make=4.4.1=hb9d3cd8_2
  - narwhals=2.22.1=pyhcf101f3_0
  - nccl=2.30.7.1=h1aa9b5a_0
  - ncurses=6.6=hdb14827_0
  - ninja=1.13.2=h171cf75_0
  - nodeenv=1.10.0=pyhd8ed1ab_0
  - nodejs=26.3.1=he4ff34a_0
  - numpy=2.5.0=py314h2b28147_0
  - nvidia-ml-py=13.610.43=pyhd8ed1ab_0
  - openblas=0.3.33=pthreads_h6ec200e_0
  - openssl=3.6.3=h35e630c_0
  - packaging=26.2=pyhc364b38_0
  - pathspec=1.1.1=pyhd8ed1ab_0
  - pip=26.1.2=pyh145f28c_0
  - platformdirs=4.10.0=pyhcf101f3_0
  - pluggy=1.6.0=pyhf9edf01_1
  - pre-commit=4.6.0=pyha770c72_0
  - pycparser=3.0=pyhcf101f3_0
  - pygments=2.20.0=pyhd8ed1ab_0
  - pylibraft=26.08.00a32=cuda13_cp311_abi3_260622_1dde2731
  - pytest=9.1.1=pyhc364b38_2
  - pytest-cov=7.1.0=pyhcf101f3_0
  - python=3.14.6=habeac84_100_cp314
  - python-discovery=1.4.2=pyhcf101f3_0
  - python-gil=3.14.6=h4df99d1_100
  - python_abi=3.14=8_cp314
  - pyyaml=6.0.3=py314h67df5f8_1
  - rapids-build-backend=0.4.2=py_0
  - rapids-dependency-file-generator=1.21.0=py_0
  - rapids-logger=0.2.3=h98325ef_0
  - rdma-core=63.0=h192683f_1
  - readline=8.3=h853b02a_0
  - referencing=0.37.0=pyhcf101f3_0
  - rhash=1.4.6=hb9d3cd8_1
  - rmm=26.08.00a39=cuda13_cp311_abi3_260622_a4ab3990
  - rpds-py=2026.5.1=py314h1bee95f_0
  - rust=1.96.0=h53717f1_0
  - rust-std-x86_64-unknown-linux-gnu=1.96.0=h2c6d0dc_0
  - scikit-build-core=0.12.2=pyh04d0eab_0
  - scikit-learn=1.9.0=np2py314hf09ca88_0
  - scipy=1.16.3=py314hf07bd8e_2
  - setuptools=82.0.1=pyh332efcf_0
  - sysroot_linux-64=2.28=h4ee821c_9
  - threadpoolctl=3.6.0=pyhecae5ae_0
  - tk=8.6.13=noxft_h366c992_103
  - tomli=2.4.1=pyhcf101f3_0
  - tomlkit=0.15.0=pyha770c72_0
  - typing_extensions=4.15.0=pyhcf101f3_0
  - tzdata=2025c=hc9c84f9_1
  - ucx=1.20.1=hf72d326_0
  - ucxx=0.51.00a31=cuda13_cp311_abi3_260622_ef40c362
  - ukkonen=1.1.0=py314h9891dd4_0
  - virtualenv=21.5.1=pyhcf101f3_0
  - yaml=0.2.5=h280c20c_3
  - zipp=4.1.0=pyhcf101f3_0
  - zstd=1.5.7=hb78ec9c_6
prefix: /home/jlamb/miniforge3/envs/cuvs-dev

Additional context

N/A

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the documented command in java/README.md and reproduce ./build.sh clean libcuvs java from a clean checkout. Inspect java/cuvs-java/src/main/java22/com/nvidia/cuvs/spi/JDKProvider.java and java/cuvs-java/src/main/java22/com/nvidia/cuvs/internal/GPUInfoProviderImpl.java, then trace why the reported CUDA symbols are unavailable. Done means the documented Java build completes successfully.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
build-system
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.