我正在尝试制作一个在Kotlin-Native中读取和执行C代码的军事示例。我正在关注here。但是,我在最后一步收到“无法解析的引用”错误。这是我正在使用的所有文件/命令。我的操作系统是Windows。

teSTLib.h

#ifndef MY_TEST_LIB
#define MY_TEST_LIB

int getRandomNumber();

#endif

teSTLib.c
#include "testlib.h"

#include <stdio.h>
#include <stdlib.h>

int getRandomNumber() {
    return rand();
}

我已经将这些文件编译到名为libtestlib.lib的静态库中。我的目标是从Kotlin Native内调用getRandomNumber

接下来,我有这些与kotlin相关的文件:

teSTLib.def
headers = testlib.h
headerFilter = ./*
compilerOpts = -L. -ltestlib -I.

CLibTest.kt
import testlib.*

fun main(args: Array<String>) {
    println(getRandomNumber())
}

最后,我正在运行这两个命令。
首先制作klib:
cinterop -def testlib.def -o testlib
然后最后一个创建可执行文件:
konanc CLibTest.kt -library testlib
在执行此命令之前,一切正常,直到出现以下错误:
CLibTest.kt:4:10: error: unresolved reference: getRandomNumber println(getRandomNumber())
有人可以指出我哪里出问题了吗?

最佳答案

Windows库必须由msys2-mingw而非msvc创建。

像这样的东西(在mingw64 shell中):

gcc -c testlib.c -o testlib.o && ar rc testlib.a testlib.o

08-05 19:28