Взаимодействие Kotlin / Native OpenGL - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь настроить проект kotlin / native, использующий библиотеки OpenGL C.

ОС: ArchLabs, linux 5.1.15 (делится репозиториями с arch)

Установленные пакеты: glu, glew, freeglut, glfw

В моем main () вызывается только одна функция (она скопирована из samples ):

glutInit(argc.ptr, null)

В моем проекте не было поддержки OpenGL, поэтому я решил сделать opengl.def:

package = platform.OpenGL
headers = GL/glut.h

compilerOpts = -I/usr/include
$ ls /usr/include/GL  
freeglut_ext.h  glcorearb.h  gl.h         glu_mangle.h  glxext.h  glx_mangle.h  glxtokens.h  wglew.h
freeglut.h      glew.h       gl_mangle.h  glut.h        glx.h     glxmd.h       internal
freeglut_std.h  glext.h      glu.h        glxew.h       glxint.h  glxproto.h    osmesa.h

А вот и мой gradle.build.kts:

plugins {
    id("org.jetbrains.kotlin.multiplatform") version "1.3.41"
}

repositories {
    mavenCentral()
}

kotlin {
    linuxX64("opengl") {
        val main by compilations.getting
        val opengl by main.cinterops.creating

        binaries {
            executable {
                entryPoint = "opengl.main"
            }
        }
    }
}

Сгенерирован файл .kt: build/classes/.../OpenGL/OpenGL.kt, в котором содержится определение функции glutInit (ну, я думаю, это больше ссылка)

А вот и вывод runReleaseExecutableOpengl

> Configure project :
Kotlin Multiplatform Projects are an experimental feature.

> Task :cinteropOpenglOpengl

> Task :linkReleaseExecutableOpengl
/home/Opengl/.konan/dependencies/clang-llvm-6.0.1-linux-x86-64/bin/ld.lld: error: undefined symbol: glutInit
>>> referenced by ld-temp.o
>>>               /tmp/konan_temp5065866915785286367/combined.o:(platform_OpenGL_kniBridge520)
e: /home/Opengl/.konan/dependencies/clang-llvm-6.0.1-linux-x86-64/bin/ld.lld invocation reported errors

> Task :linkReleaseExecutableOpengl FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':linkReleaseExecutableOpengl'.

> Process 'command '/usr/lib/jvm/java-11-openjdk/bin/java'' finished with non-zero exit value 1

Есть ли способ это исправить? Мое лучшее предположение заключается в том, что у меня должны быть установлены mingw-w64-* пакетов, например mingw-w64-freeglut. Это тот случай? Также может быть, что я указываю на неправильные заголовки (я пока не особо разбираюсь в C и уже давно не использую C ++), и он не может найти реализацию этих заголовков.

Заранее спасибо!

...