我正在尝试从 JetBrains 了解 Kotlin Native 如何与本教程一起使用:https ://kotlinlang.org/docs/tutorials/native/interop-with-c.html
但这些教程仅适用于 macOS 和 Linux。有时我使用 Windows 计算机,我想知道它在那里是如何工作的。
如何在 Windows 中添加 libcurl 库以及如何将其添加到libcurl.def
文件中?
它没有在任何地方解释。
我正在尝试从 JetBrains 了解 Kotlin Native 如何与本教程一起使用:https ://kotlinlang.org/docs/tutorials/native/interop-with-c.html
但这些教程仅适用于 macOS 和 Linux。有时我使用 Windows 计算机,我想知道它在那里是如何工作的。
如何在 Windows 中添加 libcurl 库以及如何将其添加到libcurl.def
文件中?
它没有在任何地方解释。
libcurl
关于如何将动态构建(又名 DLL)与 Kotlin/Native一起使用的更详细的分步说明。
您需要安装MSYS2,然后在 MSYS2 控制台中安装 libcurl:
$ pacman -S mingw-w64-x86_64-curl
我不认为它现在被覆盖在某个地方。这个想法仍然是一样的,你应该能够让它发挥作用。第一步是从https://curl.haxx.se/libcurl/下载并在本地构建 libcurl 。有关于如何构建它的说明和文档。我确实建议选择 Windows 自己的 SSL 实现。
完成构建后,您将同时拥有包含和库。请注意,在 Windows 上,您将始终拥有一个静态库。即使您将 curl 构建为动态库 (DLL),您也会生成一个用于链接的静态库。DLL 更易于构建和使用。真正的静态库更好,因为您的 Kotlin/Native 程序二进制文件中没有依赖项。此时,教程说明应该可以工作。
对于 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
我也在学习 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 的好帖子: