Kotlin Native cinterop def文件:如何消除绝对路径?
在指定linkerOpts时,我们需要为Kotlin Native cinterop def文件:如何消除绝对路径?,kotlin,kotlin-multiplatform,kotlin-native,Kotlin,Kotlin Multiplatform,Kotlin Native,在指定linkerOpts时,我们需要为-L选项设置绝对路径,但很容易中断 在旧版本中,在build.gradle中设置linkerOpts可能会起作用,但在1.3.50中,它警告cinterop不支持“-linker option”/-linkerOpts/-lopt option。请将链接器选项添加到.def文件或二进制编译中。”,并且生成会失败,并出现“Undefined symbols”错误 我该怎么办?此选项将被弃用一次,因此该警告是在1.3.50发布后故意添加的。这里的动机是人们应该
-L
选项设置绝对路径,但很容易中断
在旧版本中,在build.gradle中设置linkerOpts
可能会起作用,但在1.3.50中,它警告cinterop不支持“-linker option”/-linkerOpts/-lopt option。请将链接器选项添加到.def文件或二进制编译中。”,并且生成会失败,并出现“Undefined symbols”错误
我该怎么办?此选项将被弃用一次,因此该警告是在
1.3.50
发布后故意添加的。这里的动机是人们应该更喜欢设置所有链接器选项,甚至可以通过.def
文件来设置
但是,在这种情况下,构建不应该分离。您能否添加脚本内容,使其更清楚-到底是什么导致了错误
UPD:在评论中分享GH项目后,我想在这里添加一些细节。本部分的文档中描述了此问题: 通常需要为使用本机库的二进制文件指定特定于目标的链接器选项。可以使用二进制文件的linkerOpts属性来完成 因此,在这种特殊情况下,将选项添加到
binaries
部分而不是cinterops
是正确的。最后,我和他一起做了一些事情
binaries {
all {
linkerOpts = ['-L'+rootProject.projectDir+'/libs/NativeBase64/iOS/', '-lNativeBase64']
}
}
感谢您的回答,我将我的项目上传到GitHub:,在克隆(不需要子模块)后,在项目根目录下运行
/gradlew iosTest
(需要iOS development env和iPhone 8模拟器),最后一次提交将失败,并带有未定义的符号,如果您修改KmppBase64/src/iosMain/cinterop/NativeBase64.def
的内容,那么上一次提交应该可以工作。嘿@Piasy!看起来我发现了问题——看看上面的更新。如果有什么地方出了问题,但又无济于事,请再打电话给我。