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.

Reply via email to