Environments:
* Windows 10 home
* nim 1.0.0 (installed by scoop)
Questions:
I would like to extract the zip file in nim language. So I hit the nimble
install zip command and installed the zip.
However, the following simple code causes an error and does not compile.
var z: ZipArchive
if not z.open("test.zip"):
echo "Opening zip failed"
quit(1)
z.extractAll("test.zip")
z.close()
Run
errors:
C:\project\nim_docx>nim c -r test.nim
Hint: used config file
'C:\Users\nnahito\scoop\apps\nim\current\config\nim.cfg' [Conf]
Hint: system [Processing]
Hint: widestrs [Processing]
Hint: io [Processing]
Hint: test [Processing]
C:\project\nim_docx\test.nim(1, 11) Warning: using '.' instead of '/' in
import paths is deprecated [Deprecated]
Hint: docx_parser [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: streams [Processing]
Hint: parsexml [Processing]
Hint: lexbase [Processing]
Hint: zipfiles [Processing]
Hint: libzip [Processing]
CC: stdlib_system.nim
CC: stdlib_unicode.nim
CC: stdlib_streams.nim
CC: stdlib_lexbase.nim
CC: stdlib_parsexml.nim
CC: docx_parser.nim
CC: test.nim
Hint: [Link]
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x112):
undefined reference to `zError'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x2be0):
undefined reference to `crc32'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x2c86):
undefined reference to `deflateInit2_'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x2d35):
undefined reference to `deflateEnd'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x2da4):
undefined reference to `crc32'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x2dce):
undefined reference to `deflate'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x2ed6):
undefined reference to `deflateEnd'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x37ad):
undefined reference to `zError'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x3860):
undefined reference to `inflateEnd'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x39bc):
undefined reference to `crc32'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x3ab1):
undefined reference to `crc32'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x3fff):
undefined reference to `inflateInit2_'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x42ec):
undefined reference to `crc32'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x69c7):
undefined reference to `crc32'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x6a32):
undefined reference to `inflate'
C:\Users\nnahito\nimcache\test_d\libzip_all.c.o:libzip_all.c:(.text+0x6abd):
undefined reference to `crc32'
collect2.exe: error: ld returned 1 exit status
Error: execution of an external program failed: 'gcc.exe -o
C:\project\nim_docx\test.exe C:\Users\nnahito\nimcache\test_d\libzip_all.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_assertions.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_widestrs.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_io.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_system.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_parseutils.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_unicode.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_strutils.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_pathnorm.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_dynlib.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_winlean.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_times.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_os.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_streams.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_lexbase.nim.c.o
C:\Users\nnahito\nimcache\test_d\stdlib_parsexml.nim.c.o
C:\Users\nnahito\nimcache\test_d\@m..@s..@sUsers@[email protected]@[email protected]@[email protected]
C:\Users\nnahito\nimcache\test_d\@m..@s..@sUsers@[email protected]@[email protected]@[email protected]
C:\Users\nnahito\nimcache\test_d\docx_parser.nim.c.o
C:\Users\nnahito\nimcache\test_d\test.nim.c.o '
Run
I found the following issue on the internet.
[https://github.com/nim-lang/zip/issues/33](https://github.com/nim-lang/zip/issues/33)
It looked like it said to rewrite "libzip.nim" so I rewrote it. (I'm Japanese
and I'm not very good at English. But I am studying English with love for Nim.)
So, I changed
when defined(unix) and not defined(useLibzipSrc):
when defined(macosx):
{.pragma: mydll, dynlib: "libzip(|2|4).dylib".}
else:
{.pragma: mydll, dynlib: "libzip(|2).so(|.4|.2|.1|.0)".}
else:
when defined(unix):
{.passl: "-lz".}
{.compile: "zip/private/libzip_all.c".}
{.pragma: mydll.}
Run
to
when defined(unix) and not defined(useLibzipSrc):
when defined(macosx):
{.pragma: mydll, dynlib: "libzip(|2|4).dylib".}
else:
{.pragma: mydll, dynlib: "libzip(|2).so(|.4|.2|.1|.0)".}
else:
{.passl: "-lz".}
{.compile: "zip/private/libzip_all.c".}
{.pragma: mydll.}
Run
.
However, the same error appears. How do I resolve this? If anyone knows, please
let me know. Thank you in advance.