'Unable to link SDL2 in kotlin native

I am unable to link a Kotlin-native binary with SDL2. Namely undefined references.

I come from a c/c++/other native languages background. So I know exactly what it is failing to do, but I have no idea how to fix it.

I'm on Linux and first trying to get it working for such. Then adapt it to other platforms later.

The sources have been adapted from https://github.com/JetBrains/kotlin/tree/master/kotlin-native/samples/tetris

libsdl.def:
headers = SDL.h stdlib.h time.h
entryPoint = SDL_main

headerFilter = SDL* stdlib.h time.h

compilerOpts = -D_POSIX_SOURCE
compilerOpts.linux = -I/usr/include/SDL2 -D_REENTRANT
linkerOpts.linux = -L/usr/lib -pthread -lSDL2 -lm -ldl
build.gradle.kts:
plugins {
    kotlin("multiplatform") version "1.6.10"
}

group = "me.ketanr"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

kotlin {
    val hostOs = System.getProperty("os.name")
    val isMingwX64 = hostOs.startsWith("Windows")
    val nativeTarget = when {
        hostOs == "Mac OS X" -> macosX64("native")
        hostOs == "Linux" -> linuxX64("native")
        isMingwX64 -> mingwX64("native")
        else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
    }

    nativeTarget.apply {
        binaries {
            executable {
                entryPoint = "main"

                linkerOpts("-L/usr/lib", "-L/usr/lib/x86_64-linux-gnu", "-lSDL2", "-lpthread", "-ldl", "-lm")
            }
        }

        // compilations.getByName("main") {
        //     cinterops {
        //         val libsdl by creating {
        //             includeDirs("/usr/include", "/usr/include/x86_64-linux-gnu", "/usr/include/SDL2")
        //         }
        //     }
        // }
        compilations["main"].cinterops {
            val libsdl by creating {
                includeDirs("/usr/include", "/usr/include/x86_64-linux-gnu", "/usr/include/SDL2")
            }
        }
    }
    sourceSets {
        val nativeMain by getting
        val nativeTest by getting
    }
}
error log:
> Task :linkDebugExecutableNative FAILED
e: /home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/bin/ld.gold invocation reported errors

The /home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/bin/ld.gold command returned non-zero exit code: 1.
output:
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/usr/lib/crt1.o
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/usr/lib/crti.o
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/../../lib/gcc/x86_64-unknown-linux-gnu/8.3.0/crtbegin.o
/tmp/konan_temp6274769675767169924/result.o
/usr/lib/libSDL2.so
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib64/libpthread.so.0
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/usr/lib/libdl.so
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/usr/lib/libm.so
/usr/lib/libSDL2.so
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/usr/lib/libm.so
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/usr/lib/libdl.so
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(eh_personality.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(del_op.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(si_class_type_info.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(eh_alloc.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(eh_exception.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(eh_ptr.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(class_type_info.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(del_ops.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(eh_catch.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(eh_throw.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(guard.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(eh_terminate.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(eh_term_handler.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(eh_globals.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(vterminate.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(eh_call.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(eh_unex_handler.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(list.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(tree.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(chrono.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(hashtable_c++0x.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(tinfo.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(eh_type.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(pure.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libstdc++.a(guard_error.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/usr/lib/libdl.so
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/usr/lib/libm.so
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib64/libpthread.so.0
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/../../lib/gcc/x86_64-unknown-linux-gnu/8.3.0/libgcc.a(cpuinfo.o)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libgcc_s.so.1
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib64/libc.so.6
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/usr/lib64/libc_nonshared.a(elf-init.oS)
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib64/ld-linux-x86-64.so.2
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/lib/libgcc_s.so.1
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/../../lib/gcc/x86_64-unknown-linux-gnu/8.3.0/crtend.o
/home/ketanr/.konan/dependencies/x86_64-unknown-linux-gnu-gcc-8.3.0-glibc-2.19-kernel-4.9-2/x86_64-unknown-linux-gnu/sysroot/usr/lib/crtn.o
/usr/lib/libSDL2.so: error: undefined reference to 'powf', version 'GLIBC_2.27'
/usr/lib/libSDL2.so: error: undefined reference to 'exp', version 'GLIBC_2.29'
/usr/lib/libSDL2.so: error: undefined reference to 'fstat', version 'GLIBC_2.33'
/usr/lib/libSDL2.so: error: undefined reference to 'pthread_sigmask', version 'GLIBC_2.32'
/usr/lib/libSDL2.so: error: undefined reference to 'dlerror', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'pthread_once', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'pthread_setspecific', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'pthread_key_create', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'pthread_detach', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'pthread_join', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'pthread_getspecific', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'sem_trywait', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'pthread_mutexattr_settype', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'dlopen', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'sem_timedwait', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'sem_post', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'pthread_attr_setstacksize', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'sem_init', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'expf', version 'GLIBC_2.27'
/usr/lib/libSDL2.so: error: undefined reference to 'pthread_create', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'log', version 'GLIBC_2.29'
/usr/lib/libSDL2.so: error: undefined reference to 'pthread_mutexattr_init', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'logf', version 'GLIBC_2.27'
/usr/lib/libSDL2.so: error: undefined reference to 'sem_wait', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'sem_getvalue', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'sem_destroy', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'dlclose', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'dlsym', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'pow', version 'GLIBC_2.29'
/usr/lib/libSDL2.so: error: undefined reference to 'pthread_mutex_trylock', version 'GLIBC_2.34'
/usr/lib/libSDL2.so: error: undefined reference to 'stat', version 'GLIBC_2.33'

Execution failed for task ':linkDebugExecutableNative'.
> Compilation finished with errors

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
uname -a:

Linux fujitsu-endeavour 5.16.10-arch1-1 #1 SMP PREEMPT Wed, 16 Feb 2022 19:35:18 +0000 x86_64 GNU/Linux

cat /etc/*-release:
Arch Linux release
DISTRIB_ID=EndeavourOS
DISTRIB_RELEASE="rolling"
DISTRIB_DESCRIPTION="EndeavourOS Linux"
DISTRIB_CODENAME=rolling
NAME=EndeavourOS
PRETTY_NAME=EndeavourOS
ID=endeavouros
ID_LIKE=arch
BUILD_ID=2021.11.30
ANSI_COLOR="38;2;23;147;209"
HOME_URL='https://endeavouros.com'
DOCUMENTATION_URL='https://forum.endeavouros.com/c/Arch-based-related-questions/bug-reports'
SUPPORT_URL='https://forum.endeavouros.com'
BUG_REPORT_URL='https://forum.endeavouros.com/c/arch-based-related-questions/bug-reports'
LOGO=endeavouros


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source