I am playing with nim FFI (newbie speaking). I am trying to wrap
[minizip](https://github.com/madler/zlib/tree/master/contrib/minizip) for the
sake of learning a bit. I have minizip installed under ArchLinux.
What I have so far is:
#proc fmi_zip_unzip*(zip_file_path: cstring; output_folder: cstring;
# callbacks: ptr jm_callbacks): jm_status_enu_t
#int unzip(const char *zipfilename, const char *dirname);
{.deadCodeElim: on.}
const libname = "/usr/lib/libminizip.so"
#type
# unzFile* = pointer
{.passl: gorge("pkg-config --cflags minizip") .}
{.passc: gorge("pkg-config --cflags minizip") .}
#{.push importc.}
#{.push header:"unzip.h"}
{.push dynlib:libname.}
#unzFile ZEXPORT unzOpen64 OF((const void *path));
#proc unzOpen64*(zipfilename: cstring): pointer
#{.header:"<minizip-master/include/miniunz.h>".}
proc unzOpen64*(zipfilename: cstring): pointer {.header:"unzip.h"
importc:"unzOpen64"}
{.pop.} # dynlib
#{.pop.}
#{.pop.} # importc
#var error:cint
#var uf:unzFile
var uf = unzOpen64("./test.zip")
Run
And what I get is:
$ nim c -r minizip2.nim
....
minizip2.nim.c:(.text+0x20e): referencia a `unzOpen64' sin definir
collect2: error: ld devolvió el estado de salida 1
....
Which means something like **unzOpen64** is a reference without a definition.
Any clue about what am I doing wrong?
Kind regards, José M.