【问题标题】:Kotlin/Native project built without errors, but fails to runKotlin/Native 项目构建没有错误,但无法运行
【发布时间】:2022-11-04 10:20:26
【问题描述】:

我使用 gradle init 创建了一个 Kotlin/Native 项目,并按照此处的说明,成功地构建了项目,并生成了一个 build/bin/native/debugExecutable/executable.kexe 可执行文件。

但是当我尝试运行该项目时,我收到了消息:

/build/bin/native/debugExecutable/executable.kexe: error while loading shared libraries: libone.so: cannot open shared object file: No such file or directory

我正在使用位于目录../libone/libone.so(相对于项目文件夹)中的 C 库。我在我的项目的目录src/nativeInterop/cinterop 上有这个*.dex 文件:

headers = libone.h
package = libone

compilerOpts.linux = -I/.../libone
linkerOpts.linux = -L/.../libone -lone

我尝试将可执行文件 (executable.kexe) 和库 (libone.so) 放在同一目录中,但也不起作用(发生同样的错误)。我在这里缺少什么?

更新我手动将linux环境变量LD_LIBRARY_PATH设置为库目录。我想知道我是否可以在不改变系统的情况下工作。

构建.gradle

plugins {
    id 'org.jetbrains.kotlin.multiplatform' version '1.5.31'
}

repositories {
    mavenCentral()
}

kotlin {
    def hostOs = System.getProperty("os.name")
    def isMingwX64 = hostOs.startsWith("Windows")
    def nativeTarget
    if (hostOs == "Mac OS X") nativeTarget = macosX64('native')
    else if (hostOs == "Linux") nativeTarget = linuxX64("native")
    else if (isMingwX64) nativeTarget = mingwX64("native")
    else throw new FileNotFoundException("Host OS is not supported in Kotlin/Native.")

    nativeTarget.with {
        compilations.main { // NL
            cinterops {     // NL
                libone     // NL
            }               // NL
        }                   // NL
        binaries {
            executable {
                entryPoint = 'main'
            }
        }
    }
    sourceSets {
        nativeMain {

        }
        nativeTest {

        }
    }
}

libone 的 Makefile

all: libone

libone: libone.o
    gcc -shared -o libone.so libone.o -Wl,--out-implib,libone.a

libone.o: libone.c
    gcc -fPIC -c libone.c -o libone.o

【问题讨论】:

  • 您是否尝试将 .def 文件中的绝对路径设置为链接器选项?我的猜测是相对路径可能是这里的根本原因。

标签: kotlin kotlin-native


【解决方案1】:

您可以尝试将def文件中的路径更改为绝对路径,在我的项目中,我通常会动态生成def并使其成为gradle任务。但是我还是建议你使用绝对路径,这里有足够的例子kotlin native samples

【讨论】:

    猜你喜欢
    • 2012-05-05
    • 2015-10-14
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 2014-08-23
    相关资源
    最近更新 更多