Stuck at 'make': libgromacs.so.7: undefined reference to `__kmpc_...'

GROMACS version: 2022.4
GROMACS modification: No

Hi! I tried to build GROMACS 2022.4 + hipSYCL on my PC with ROCm 5.3.3 installed. I’m currently stuck at:

libgromacs.so.7: undefined reference to `__kmpc_...'
[ 98%] Built target gmxapi
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/box.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/gmxcalculatorcpu.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/integrator.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/interactions.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/molecules.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/nbnxmsetuphelpers.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/particlesequencer.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/particletype.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/simulationstate.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/topologyhelpers.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/topology.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/tpr.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/virials.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/listed_forces/calculator.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/listed_forces/transformations.cpp.o
[ 98%] Building CXX object api/nblib/CMakeFiles/nblib.dir/listed_forces/conversions.cpp.o
[100%] Building CXX object api/nblib/CMakeFiles/nblib.dir/listed_forces/convertGmxToNblib.cpp.o
[100%] Building CXX object api/nblib/CMakeFiles/nblib.dir/util/setup.cpp.o
[100%] Linking CXX shared library ../../lib/libnblib_gmx.so
[100%] Built target nblib
[100%] Building CXX object api/nblib/samples/CMakeFiles/argon-forces-integration.dir/argon-forces-integration.cpp.o
[100%] Linking CXX executable ../../../bin/argon-forces-integration
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_dispatch_next_4'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_for_static_fini'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_barrier'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_dispatch_fini_4'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_dispatch_init_4'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_for_static_init_4u'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_end_critical'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_for_static_init_8'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_master'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_for_static_init_8u'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_fork_call'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_for_static_init_4'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_ordered'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_push_num_threads'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_global_thread_num'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_critical'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_reduce_nowait'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_end_master'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_single'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_end_single'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_end_ordered'
/usr/bin/ld: /home/labhhc/gromacs-2022.4/build/lib/libgromacs.so.7: undefined reference to `__kmpc_end_reduce_nowait'
collect2: error: ld returned 1 exit status
make[2]: *** [api/nblib/samples/CMakeFiles/argon-forces-integration.dir/build.make:100: bin/argon-forces-integration] Error 1
make[1]: *** [CMakeFiles/Makefile2:4420: api/nblib/samples/CMakeFiles/argon-forces-integration.dir/all] Error 2
make: *** [Makefile:166: all] Error 2

cmake commands i used were:

cmake .. -DCMAKE_C_COMPLIER=/opt/rocm-5.3.3/llvm/bin/clang -DCMAKE_CXX_COMPLIER=/opt/rocm-5.3.3/llvm/bin/clang++ -DGMX_GPU=SYCL -DGMX_SYCL_HIPSYCL=ON -DHIPSYCL_TARGETS='hip:gfx1030' -DGMX_BUILD_OWN_FFTW=ON -DREGRESSIONTEST_DOWNLOAD=ON -DLLVM_DIR=/opt/rocm/llvm/lib/cmake/llvm/

The cmake returned no error.

I tested to see if clang -fopenmp pointed to ROCm OpenMP. Here is the result:

/opt/rocm/llvm/bin/clang++ -fopenmp main.cpp && readelf -d ./a.out && ldd ./a.out

Dynamic section at offset 0x1168 contains 30 entries:
  Tag        Type                         Name/Value
 0x000000000000001d (RUNPATH)            Library runpath: [/opt/rocm-5.3.3/llvm/bin/../lib]
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libomp.so]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x0000000000000015 (DEBUG)              0x0
 0x0000000000000007 (RELA)               0x200968
 0x0000000000000008 (RELASZ)             72 (bytes)
 0x0000000000000009 (RELAENT)            24 (bytes)
 0x0000000000000017 (JMPREL)             0x2009b0
 0x0000000000000002 (PLTRELSZ)           384 (bytes)
 0x0000000000000003 (PLTGOT)             0x204368
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000006 (SYMTAB)             0x2002e8
 0x000000000000000b (SYMENT)             24 (bytes)
 0x0000000000000005 (STRTAB)             0x2005e0
 0x000000000000000a (STRSZ)              903 (bytes)
 0x000000006ffffef5 (GNU_HASH)           0x2005b8
 0x0000000000000019 (INIT_ARRAY)         0x203158
 0x000000000000001b (INIT_ARRAYSZ)       16 (bytes)
 0x000000000000001a (FINI_ARRAY)         0x203150
 0x000000000000001c (FINI_ARRAYSZ)       8 (bytes)
 0x000000000000000c (INIT)               0x202008
 0x000000000000000d (FINI)               0x202024
 0x000000006ffffff0 (VERSYM)             0x2004f8
 0x000000006ffffffe (VERNEED)            0x200524
 0x000000006fffffff (VERNEEDNUM)         3
 0x0000000000000000 (NULL)               0x0
	linux-vdso.so.1 (0x00007ffcf17bd000)
	libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9cd4969000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9cd481a000)
	libomp.so => /opt/rocm-5.3.3/llvm/bin/../lib/libomp.so (0x00007f9cd4727000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9cd470c000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9cd46e9000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9cd44f7000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f9cd4b6b000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f9cd44eb000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9cd44e5000)

How can I fix this kmpc linking problem? Thank you!

Hello!

The CMake command you’re using is correct.

Which version of hipSYCL are you using? There was a similar issue with default linker flags in hipSYCL 0.9.2, which was resolved in 0.9.3.

Another note: I see that you’re targeting gfx1030 device (RX6900?), which has RDNA2 architecture. Such devices are not properly handled in the GROMACS 2022.x branch. I suggest grabbing the main branch of GROMACS from GROMACS / GROMACS · GitLab (or waiting a day or two for the 2023-beta).

Thank you for your support!

I installed the newest hipSYCL (from source) using ROCm clang with this cmake:

cmake .. -DROCM_PATH=/opt/rocm -DWITH_ROCM_BACKEND=ON -DLLVM_DIR=/opt/rocm/llvm/lib/cmake/llvm -DLCLANG_EXECUTABLE_PATH=/opt/rocm/llvm/bin/clang++ -DCLANG_INCLUDE_PATH=/opt/rocm/llvm/lib/clang/15.0.0/include/

The hipSYCL build was fine, and I just did it yesterday.
I will try building GROMACS from source then.

I just tried building GROMACS from source, and the problem is still remained.

/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_end_critical'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_for_static_init_8'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_dispatch_next_4'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_master'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_for_static_fini'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_for_static_init_8u'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_for_static_init_4'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_fork_call'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_push_num_threads'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_ordered'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_barrier'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_dispatch_fini_4'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_global_thread_num'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_dispatch_init_4'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_critical'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_reduce_nowait'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_end_master'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_single'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_for_static_init_4u'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_end_single'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_end_ordered'
/usr/bin/ld: ../../lib/libgromacs.so.8.0.0: undefined reference to `__kmpc_end_reduce_nowait'
collect2: error: ld returned 1 exit status
make[2]: *** [src/programs/CMakeFiles/gmx.dir/build.make:93: bin/gmx] Error 1
make[1]: *** [CMakeFiles/Makefile2:6206: src/programs/CMakeFiles/gmx.dir/all] Error 2

That’s expected. The problem I was referring to would be apparent only when running the code.

I see now. It is CMAKE_C_COMPILER, not CMAKE_C_COMPLIER. Same for CXX.

Oh, my really bad mistake!
I tried again and successfully installed.
make check returned 87/88 tests passed.
Thank you for supporting!

Great!

Do you mind sharing which one failed (and how)? Generally, it should be 88/88.

Oh the one that failed was 63 - MdrunIOTests.

[----------] Global test environment tear-down
[==========] 68 tests from 12 test suites ran. (4309 ms total)
[  PASSED  ] 67 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] NormalIntegrators/MdrunNoAppendContinuationIsExact.WithinTolerances/8, where GetParam() = ("alanine_vsite_vacuo", "md", "no", "no", 4-byte object <00-00 00-00>)

 1 FAILED TEST

      Start 64: MdrunTestsOneRank
64/88 Test #64: MdrunTestsOneRank .........................   Passed    7.86 sec
      Start 65: MdrunTestsTwoRanks
65/88 Test #65: MdrunTestsTwoRanks ........................   Passed    3.26 sec
      Start 66: MdrunSingleRankAlgorithmsTests
66/88 Test #66: MdrunSingleRankAlgorithmsTests ............   Passed    4.98 sec
      Start 67: MdrunNonIntegratorTests
67/88 Test #67: MdrunNonIntegratorTests ...................   Passed    3.21 sec
      Start 68: MdrunTpiTests
68/88 Test #68: MdrunTpiTests .............................   Passed    0.72 sec
      Start 69: MdrunMpiTests
69/88 Test #69: MdrunMpiTests .............................   Passed   12.11 sec
      Start 70: MdrunMultiSimTests
70/88 Test #70: MdrunMultiSimTests ........................   Passed    0.44 sec
      Start 71: MdrunMultiSimReplexTests
71/88 Test #71: MdrunMultiSimReplexTests ..................   Passed    0.40 sec
      Start 72: MdrunMultiSimReplexEquivalenceTests
72/88 Test #72: MdrunMultiSimReplexEquivalenceTests .......   Passed    0.02 sec
      Start 73: MdrunMpi1RankPmeTests
73/88 Test #73: MdrunMpi1RankPmeTests .....................   Passed   11.98 sec
      Start 74: MdrunMpi2RankPmeTests
74/88 Test #74: MdrunMpi2RankPmeTests .....................   Passed   11.30 sec
      Start 75: MdrunCoordinationBasicTests1Rank
75/88 Test #75: MdrunCoordinationBasicTests1Rank ..........   Passed    0.58 sec
      Start 76: MdrunCoordinationBasicTests2Ranks
76/88 Test #76: MdrunCoordinationBasicTests2Ranks .........   Passed    0.88 sec
      Start 77: MdrunCoordinationCouplingTests1Rank
77/88 Test #77: MdrunCoordinationCouplingTests1Rank .......   Passed    2.58 sec
      Start 78: MdrunCoordinationCouplingTests2Ranks
78/88 Test #78: MdrunCoordinationCouplingTests2Ranks ......   Passed    9.33 sec
      Start 79: MdrunCoordinationConstraintsTests1Rank
79/88 Test #79: MdrunCoordinationConstraintsTests1Rank ....   Passed   11.65 sec
      Start 80: MdrunCoordinationConstraintsTests2Ranks
80/88 Test #80: MdrunCoordinationConstraintsTests2Ranks ...   Passed   16.59 sec
      Start 81: MdrunFEPTests
81/88 Test #81: MdrunFEPTests .............................   Passed   37.28 sec
      Start 82: MdrunPullTests
82/88 Test #82: MdrunPullTests ............................   Passed    1.13 sec
      Start 83: MdrunSimulatorComparison
83/88 Test #83: MdrunSimulatorComparison ..................   Passed    0.02 sec
      Start 84: MdrunVirtualSiteTests
84/88 Test #84: MdrunVirtualSiteTests .....................   Passed    1.66 sec
      Start 85: regressiontests/complex
85/88 Test #85: regressiontests/complex ...................   Passed  121.34 sec
      Start 86: regressiontests/freeenergy
86/88 Test #86: regressiontests/freeenergy ................   Passed   38.32 sec
      Start 87: regressiontests/rotation
87/88 Test #87: regressiontests/rotation ..................   Passed    7.85 sec
      Start 88: regressiontests/essentialdynamics
88/88 Test #88: regressiontests/essentialdynamics .........   Passed    8.76 sec

99% tests passed, 1 tests failed out of 88

Label Time Summary:
GTest              = 159.57 sec*proc (81 tests)
IntegrationTest    = 106.20 sec*proc (25 tests)
MpiTest            =  91.13 sec*proc (19 tests)
QuickGpuTest       =  28.28 sec*proc (17 tests)
SlowGpuTest        = 300.69 sec*proc (18 tests)
SlowTest           =  48.70 sec*proc (13 tests)
UnitTest           =   4.67 sec*proc (43 tests)

Total Test time (real) = 336.01 sec

The following tests FAILED:
	 63 - MdrunIOTests (Failed)
Errors while running CTest
make[3]: *** [CMakeFiles/run-ctest-nophys.dir/build.make:71: CMakeFiles/run-ctest-nophys] Error 8
make[2]: *** [CMakeFiles/Makefile2:3257: CMakeFiles/run-ctest-nophys.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:3290: CMakeFiles/check.dir/rule] Error 2
make: *** [Makefile:628: check] Error 2

Could you please upload the full log?

To run individual test, instead of make check, you can do ctest -R MdrunIOTests --output-on-failure &> full_output.log

We have limited “real-world” testing of our SYCL build, so each bug report is extremely valuable :)

I ran the command and here is the full log you required:
full_output.log (464.6 KB)

1 Like

Thanks! We will need to double-check, but it looks like just our tests having too tight tolerances. Probably nothing to worry about.

1 Like