Skip to content

AMD GPU not detected on Linux, undefined hidden symbols #10

Description

@ottosch

I always get this output:

INFO Using CPU backend for scanning (no GPU detected)

Since my OpenCL installation looked ok to me:

$ ldconfig -p | grep libOpenCL
libOpenCL.so.1 (libc6,x86-64) => /usr/lib/libOpenCL.so.1
libOpenCL.so (libc6,x86-64) => /usr/lib/libOpenCL.so

$ clinfo | grep "Number of"
Number of platforms                               1
Number of devices                                 1

I recompiled duckdb-ufsecp-extension, setting config.verbose = true, then replaced the compiled extension on frigate and got build errors this time:

2026-05-15 13:27:44,441 INFO Using home directory /home/otto/.frigate                                                                                                                                              
OpenCL Device: gfx90c:xnack+                                                                                                                                                                                       
  Vendor: Advanced Micro Devices, Inc.                                                                                                                                                                             
  Version: OpenCL 2.0                                                                                                                                                                                              
  Driver: 3581.0 (HSA1.1,LC)                                                                                                                                                                                       
  Global Memory: 16957 MB                                                                                                                                                                                          
  Local Memory: 64 KB                                                                                                                                                                                              
  Compute Units: 8                                                                                                                                                                                                 
  Max Clock: 1900 MHz                                                                                                                                                                                              
[DEBUG] Creating OpenCL context for device: gfx90c:xnack+                                                                                                                                                          
[DEBUG] Context created successfully                                                                                                                                                                               
[DEBUG] Command queue created successfully                                                                                                                                                                         
[DEBUG] build_program failed: Build failed: ld.lld: error: undefined hidden symbol: field_inv_impl                                                                                                                 
>>> referenced by /tmp/comgr-97681-7-3fe83e/input/linked.o:(field_inv)                                                                                                                                             
>>> referenced by /tmp/comgr-97681-7-3fe83e/input/linked.o:(field_inv)                                                                                                                                             
>>> referenced by /tmp/comgr-97681-7-3fe83e/input/linked.o:(field_inv)                                                                                                                                             
>>> referenced 11 more times                                                                                                                                                                                       
                                                                                                                                                                                                                   
ld.lld: error: undefined hidden symbol: scalar_mul_generator_glv_impl                                                                                                                                              
>>> referenced by /tmp/comgr-97681-7-3fe83e/input/linked.o:(scalar_mul_generator)                                                                                                                                  
>>> referenced by /tmp/comgr-97681-7-3fe83e/input/linked.o:(scalar_mul_generator)                                                                                                                                  
                                                                                                                                                                                                                   
ld.lld: error: undefined hidden symbol: point_add_impl                                                                                                                                                             
>>> referenced by /tmp/comgr-97681-7-3fe83e/input/linked.o:(point_add)                                                                                                                                             
>>> referenced by /tmp/comgr-97681-7-3fe83e/input/linked.o:(point_add)                                                                                                                                             
>>> referenced by /tmp/comgr-97681-7-3fe83e/input/linked.o:(msm_block_reduce_kernel)                                                                                                                               
>>> referenced 1 more times                                                                                                                                                                                        
                                                                                                                                                                                                                   
ld.lld: error: undefined hidden symbol: scalar_mul_glv_cl                                                                                                                                                          
>>> referenced by /tmp/comgr-97681-7-3fe83e/input/linked.o:(scalar_mul)
>>> referenced by /tmp/comgr-97681-7-3fe83e/input/linked.o:(scalar_mul)
Error: Creating the executable from LLVM IRs failed.

2026-05-15 13:27:44,984 INFO Using CPU backend for scanning (no GPU detected)

Maybe it's because UltrafastSecp256k1 was built without ROCm/HIP? Build log has:

-- +===========================================================+
-- |   UltrafastSecp256k1 Configuration                        |
-- +===========================================================+
--   Version:          3.66.0
--   Platform:         x86_64
--   C++ Standard:     20
--   Build Type:       Release
-- 
--   Components:
--     CPU:            ON
--     CUDA:           OFF
--     ROCm/HIP:       OFF
--     OpenCL:         ON
--     Metal:          OFF
--     Tests:          OFF
--     Benchmarks:     OFF
--     Examples:       OFF
--     Java JNI:       ON

I then tried to build UltrafastSecp256k1 with that support, but it would always fail with errors like:

[45/89] Building HIP object cuda_rocm/CMakeFiles/bench_bip324_cuda.dir/src/bench_bip324_transport.cu.o
FAILED: [code=1] cuda_rocm/CMakeFiles/bench_bip324_cuda.dir/src/bench_bip324_transport.cu.o
[46/89] Building HIP object cuda_rocm/CMakeFiles/gpu_bench_unified.dir/src/gpu_bench_unified.cu.o
FAILED: [code=1] cuda_rocm/CMakeFiles/gpu_bench_unified.dir/src/gpu_bench_unified.cu.o
[47/89] Building HIP object cuda_rocm/CMakeFiles/gpu_audit_runner.dir/src/gpu_audit_runner.cu.o
FAILED: [code=1] cuda_rocm/CMakeFiles/gpu_audit_runner.dir/src/gpu_audit_runner.cu.o

Even though I explicitly tried to disable benchmarks:

cmake -B build -DSECP256K1_BUILD_ROCM=ON -DSECP256K1_BUILD_CUDA=OFF -DSECP256K1_BUILD_TESTS=OFF -DSECP256K1_BUILD_BENCH=OFF -G Ninja

This was the config during this build attempt:

-- +===========================================================+
-- |   UltrafastSecp256k1 Configuration                        |
-- +===========================================================+
--   Version:          3.66.0
--   Platform:         x86_64
--   C++ Standard:     20
--   Build Type:       
-- 
--   Components:
--     CPU:            ON
--     CUDA:           OFF
--     ROCm/HIP:       ON
--     OpenCL:         OFF
--     Metal:          OFF
--     Tests:          OFF
--     Benchmarks:     OFF
--     Examples:       ON
--     Java JNI:       ON
-- 
--   Optimizations:
--     Assembly:       ON
--     Speed First:    OFF
--     Bitcoin Strict: ON

Since this could be specific to my GPU, will try building again if you have any suggestion.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions