【问题标题】:Reading gzip files in nimlang?在 nimlang 中读取 gzip 文件?
【发布时间】:2020-02-20 03:08:06
【问题描述】:

我一直在尝试学习 nimlang,因为它似乎有很大的潜力可以简单地与 python 集成 - 但我是一个 Windows 人。我要编译的脚本很简单:

import zip/gzipfiles  # Import zip package

block:
  let vcf = newGzFileStream("test.txt.gz")  # Open gzip file
  var line: string  # Declare line variable

  # Loop over each line in the file
  while not vcf.atEnd():
    line = vcf.readLine()
    echo line

使用我压缩过的名为“test.txt.gz”的测试文件:

this
is
gzipped

在windows linux子系统和普通linux上编译成功:

bub@bubs-surface-book-2:/mnt/c/Users/bubth/Development/nim$ nim c read_gzip.nim
Hint: used config file '/etc/nim.cfg' [Conf]
Hint: system [Processing]
Hint: read_gzip [Processing]
Hint: gzipfiles [Processing]
Hint: os [Processing]
Hint: strutils [Processing]
Hint: parseutils [Processing]
Hint: math [Processing]
Hint: algorithm [Processing]
Hint: times [Processing]
Hint: posix [Processing]
Hint: ospaths [Processing]
Hint: zlib [Processing]
Hint: streams [Processing]
CC: read_gzip
Hint:  [Link]
Hint: operation successful (22504 lines compiled; 0.634 sec total; 35.035MiB peakmem; Debug Build) [SuccessX]
bub@bubs-surface-book-2:/mnt/c/Users/bubth/Development/nim$ ./read_gzip
asdf
1234
test
this
works
bub@bubs-surface-book-2:/mnt/c/Users/bubth/Development/nim$

但在 windows 上,它可以编译但不知道如何使用 zlib dll:

PS C:\Users\bubth\Development\nim> nim c .\read_gzip.nim
Hint: used config file 'C:\Users\bubth\scoop\apps\nim\current\config\nim.cfg' [Conf]
Hint: system [Processing]
Hint: widestrs [Processing]
Hint: io [Processing]
Hint: read_gzip [Processing]
Hint: gzipfiles [Processing]
Hint: os [Processing]
Hint: strutils [Processing]
Hint: parseutils [Processing]
Hint: math [Processing]
Hint: bitops [Processing]
Hint: macros [Processing]
Hint: algorithm [Processing]
Hint: unicode [Processing]
Hint: pathnorm [Processing]
Hint: osseps [Processing]
Hint: winlean [Processing]
Hint: dynlib [Processing]
Hint: times [Processing]
Hint: options [Processing]
Hint: typetraits [Processing]
Hint: time_t [Processing]
Hint: zlib [Processing]
Hint: streams [Processing]
Hint:  [Link]
Hint: operation successful (37181 lines compiled; 0.921 sec total; 46.852MiB peakmem; Debug Build) [SuccessX]
PS C:\Users\bubth\Development\nim> .\read_gzip.exe
could not load: zlib1.dll
PS C:\Users\bubth\Development\nim>

我尝试通过https://github.com/microsoft/vcpkg 安装 zlib,但即使在浏览并成功“链接”了一些东西之后,它也没有找到库。我发誓我不傻,但我错过了什么?有没有什么特别的方法可以让 nimble 识别到这些包?

【问题讨论】:

  • 您的 PATH 或 EXE 所在的本地目录中是否有 zlib1.dll?如果没有,您需要下载一个副本。如果这样做,则需要确保它与 EXE 相同。
  • 我想我认为 vcpkg 会为我这样做,但我可能弄错了。我会试试看 - 这只是“windows 默认情况下不会将它们放在 PATH 中,但 linux 会”之类的事情吗?
  • 尝试将副本添加到本地文件夹和 PATH 中,但仍然出现相同的错误。
  • 你的 Nim 拱门是什么?尼姆-v。然后检查dll是否匹配。
  • 看起来 zip 包假定您在 Windows 上安装了 dll,并且不包含它。为了解决这个问题,我必须手动下载“正确”的 .dll 文件并将其添加到我的路径中,之后它编译并运行得很好。

标签: zip gzip nim-lang


【解决方案1】:

看起来 zip 包假定您在 Windows 上安装了 dll,并且不包含它。为了解决这个问题,我必须手动下载正确的 .dll 文件并将其添加到我的路径中,然后编译并运行良好。

PS C:\Users\bubth\Development\vcpkg> .\vcpkg.exe install zlib:x64-windows
Computing installation plan...
The following packages are already installed:
    zlib[core]:x64-windows
Package zlib:x64-windows is already installed

Total elapsed time: 618.1 us

The package zlib is compatible with built-in CMake targets:

    find_package(ZLIB REQUIRED)
    target_link_libraries(main PRIVATE ZLIB::ZLIB)

PS C:\Users\bubth\Development\vcpkg>

将 vcpkg bin 文件夹添加到我的 Path 环境变量中

C:\Users\bubth\Development\vcpkg\installed\x64-windows\bin

重新编译并运行:

PS C:\Users\bubth\Development\nim> nim c --run .\read_gzip.nim
Hint: used config file 'C:\Users\bubth\scoop\apps\nim\current\config\nim.cfg' [Conf]
Hint: system [Processing]
Hint: widestrs [Processing]
Hint: io [Processing]
Hint: read_gzip [Processing]
Hint: gzipfiles [Processing]
Hint: os [Processing]
Hint: strutils [Processing]
Hint: parseutils [Processing]
Hint: math [Processing]
Hint: bitops [Processing]
Hint: macros [Processing]
Hint: algorithm [Processing]
Hint: unicode [Processing]
Hint: pathnorm [Processing]
Hint: osseps [Processing]
Hint: winlean [Processing]
Hint: dynlib [Processing]
Hint: times [Processing]
Hint: options [Processing]
Hint: typetraits [Processing]
Hint: time_t [Processing]
Hint: zlib [Processing]
Hint: streams [Processing]
Hint:  [Link]
Hint: operation successful (37182 lines compiled; 1.361 sec total; 58.07MiB peakmem; Debug Build) [SuccessX]
Hint: C:\Users\bubth\Development\nim\read_gzip.exe  [Exec]
asdf
1234
test
this
works
PS C:\Users\bubth\Development\nim>

【讨论】:

    【解决方案2】:

    zip nimble 包的源代码,我猜你正在使用,seems to be a wrapper 位于 zlib 周围,位于 https://www.zlib.net。从那里你有一些 Windows 链接,其中可能包含你需要的 .dll 文件,看起来特别有前途的 zlib for windows 网站。

    如果您在使用此模块时一直遇到问题,您可以尝试 creating an issue at the GitHub project,该 README 确实可以提供一些指向您需要的 .dll 二进制下载的链接。

    【讨论】:

    • 对当前问题添加了一条评论,该问题有一些不起作用的建议 - 看起来库假设您的路径中已经有 zlib.dll,对于 windows 的香草安装来说不对。就我个人而言,我认为安装应该验证所需的软件包是否存在 - 但我不知道是否有一些更惯用的东西我错过了 nim 应该如何安装软件包
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多