Windows 上的 Kotlin Native libcurl 示例

Posted

技术标签:

【中文标题】Windows 上的 Kotlin Native libcurl 示例【英文标题】:Kotlin Native libcurl example on Windows 【发布时间】:2019-03-23 02:08:26 【问题描述】:

我正在尝试通过 JetBrains 的本教程了解 Kotlin Native 如何工作:https://kotlinlang.org/docs/tutorials/native/interop-with-c.html

但这些教程仅适用于 macOS 和 Linux。有时我使用 Windows 计算机,我想知道它是如何工作的。

如何在 windows 中添加 libcurl 库以及如何将其添加到libcurl.def 文件中?

没有在任何地方解释。

【问题讨论】:

【参考方案1】:

你需要安装MSYS2,然后在MSYS2控制台安装libcurl:

$ pacman -S mingw-w64-x86_64-curl

见https://github.com/JetBrains/kotlin-native/pull/1499

【讨论】:

github.com/JetBrains/kotlin-native/pull/… 这是我的实际问题。 对定位 x32 所需的更改有何建议?【参考方案2】:

关于如何将动态构建的libcurl(又名 DLL)与 Kotlin/Native 一起使用的更详细的分步说明。

https://jonnyzzz.com/blog/2018/10/29/kn-libcurl-windows/

【讨论】:

【参考方案3】:

我认为它现在没有被覆盖。这个想法仍然是一样的,你应该能够让它发挥作用。第一步是从https://curl.haxx.se/libcurl/本地下载并构建libcurl。有关于如何构建它的说明和文档。我确实建议选择 Windows 自己的 SSL 实现。

一旦您完成构建,您将拥有包含和库。请注意,在 Windows 上,您将始终拥有一个静态库。即使您将 curl 构建为动态库 (DLL),您也会生成一个用于链接的静态库。 DLL 更易于构建和使用。真正的静态库更好,因为您的 Kotlin/Native 程序二进制文件中没有依赖项。此时,教程说明应该可以工作了。

【讨论】:

静态库文件应该放在哪里?在linux中,我认为它位于编译器库路径上。我对吗?此外,对于 linux 和 mac,还有特殊的 linkerOpts 参数。这里的windows应该怎么做? 只包含linkerOpts的路径【参考方案4】:

对于 Windows,如果您只需要基本的 HTTP 通信,您也可以尝试 WinINet API,它是 Windows 的一部分,因此不需要依赖。使用 libcurl 库没有任何麻烦。

请参阅我的示例,了解如何将 WinInet API 与 Kotlin MPP 一起使用:https://github.com/localazy/kotlin-mpp-wininet

对于 macOS 和 Linux,无需手动使用 libcurl,只需使用 ktor 客户端即可:https://ktor.io/clients/index.html

【讨论】:

【参考方案5】:

我也在学习 Kotlin,花了好几个小时才意识到如何处理 def 文件、包含和静态库。

我做了一个例子来说明如何在 kotlin-native 上使用静态库(带有 gzip 的 curl 和使用 mingw 编译的 SSL 支持)。这样您就不需要为您的应用程序提供 dll 文件

https://github.com/carlosrafp/Libcurl-Kotlin-Native-standalone

在 libcurl.def 文件中可以看到:

headers = curl/curl.h   // path to curl header
libraryPaths = src/nativeInterop/cinterop  // path to your static library
staticLibraries = libcurl.a // the static library
linkerOpts.mingw = -lws2_32 -lwldap32 // linking dependences

我基于 jonnyzzz 的好帖子:

https://jonnyzzz.com/blog/2018/10/29/kn-libcurl-windows/

【讨论】:

你应该把它写成评论。

以上是关于Windows 上的 Kotlin Native libcurl 示例的主要内容,如果未能解决你的问题,请参考以下文章

一睹为快!Kotlin 开发 iOS 的新利器:Kotlin/Native 插件

[译]Kotlin/Native v0.2 发布啦

Kotlin/Native IDE支持预览

kotlin-native04 调用c动态库

kotlin MPP 与 Kotlin Native 有啥不同?

为啥 Koin 在我的 KMM 应用程序中抛出“未捕获的 Kotlin 异常:kotlin.native.IncorrectDereferenceException”?