"Unresolved Reference" 互操作 C 库时
"Unresolved Reference" when Interop-ing C Library
我正在尝试制作一个在 Kotlin-Native 中读取和执行 C 代码的军国主义示例。我正在关注这篇文章 here。但是,我在最后一步收到 "Unresolved Reference" 错误。这是我正在使用的所有 files/commands。 我的操作系统是 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
headerFilter
您 testlib.def
中的值不正确。您可以尝试将其删除。
过滤器应用于 headers 中的 #include
指令下写入的值和 .def
文件中的 headers
值元素。 None 个字符串有 ./
个前缀。
答案是 Svyatoslav Scherbina 和 Mike Sinkovsky 的建议组合。
"headerFilter"不正确,需要删除,静态库需要嵌入.klib。通过设置 testlib.def 为:
headers = testlib.h
compilerOpts = -I.
staticLibraries = libtestlib.lib
libraryPaths = .
问题已解决,kotlin 文件 complies/runs 没有问题!
我正在尝试制作一个在 Kotlin-Native 中读取和执行 C 代码的军国主义示例。我正在关注这篇文章 here。但是,我在最后一步收到 "Unresolved Reference" 错误。这是我正在使用的所有 files/commands。 我的操作系统是 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
headerFilter
您 testlib.def
中的值不正确。您可以尝试将其删除。
过滤器应用于 headers 中的 #include
指令下写入的值和 .def
文件中的 headers
值元素。 None 个字符串有 ./
个前缀。
答案是 Svyatoslav Scherbina 和 Mike Sinkovsky 的建议组合。
"headerFilter"不正确,需要删除,静态库需要嵌入.klib。通过设置 testlib.def 为:
headers = testlib.h
compilerOpts = -I.
staticLibraries = libtestlib.lib
libraryPaths = .
问题已解决,kotlin 文件 complies/runs 没有问题!