Чтение файлов gzip в nimlang? - PullRequest
       50

Чтение файлов gzip в nimlang?

0 голосов
/ 20 февраля 2020

Я пытался выучить 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

It успешно компилируется в подсистеме 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>

Я пытался установить zlib через https://github.com/microsoft/vcpkg, но даже после того, как прошел и успешно "связал" вещи, он не находит библиотеки. Клянусь, я не тупой, но чего мне не хватает? Есть ли какой-то особый способ получить эти пакеты в windows таким образом, который проворное распознает?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Похоже, что пакет zip предполагает, что у вас установлена ​​dll, если вы используете windows, и не включает его. Чтобы это исправить, мне пришлось вручную загрузить правильный файл .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>

Добавил папку bin vcpkg в мою переменную среды 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>
0 голосов
/ 21 февраля 2020

Исходный код пакета zip nimble, который, как я полагаю, вы используете, выглядит как оболочка вокруг zlib, найденного в https://www.zlib.net. Оттуда у вас есть несколько windows ссылок, которые могут содержать нужный вам файл .dll, особенно многообещающе выглядит сайт zlib для windows.

Если у вас по-прежнему возникают проблемы с В этом модуле вы можете попробовать создать проблему в проекте GitHub , чтобы README действительно мог иметь несколько ссылок на двоичные файлы для загрузки .dll, которые вам нужны.

...