Need help configuring Zigler with link_lib

Hi,

I am trying to write a elixir client for

What I am attempting to do is fetch the zig code, compile it in priv and then use it via Zigler.

I cant seem to get Zigler to find the header and/or the link_lib

I am using a x86_64 machine and running in WSL2

error:

\*\* (CompileError) lib/jace/bridge.ex:5: error: C import failed

pub const cc = @cImport(@cInclude(“opentui.h”)).createRenderer;
^\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~\~
referenced by:
streamModule__anon_24197: .elixir_ls/build/test/lib/zigler/priv/beam/sema.zig:231:45
main: .elixir_ls/build/test/lib/zigler/priv/beam/sema.zig:284:21
4 reference(s) hidden; use ‘-freference-trace=6’ to see all references
/home/archon/.cache/zig/o/4fd94b536b9f26726f3d4aaeabed04ae/cimport.h:1:10: error: ‘opentui.h’ file not found
#include <opentui.h>

Is my approach correct ?
Am I missing something stupid?
Any feedback and/guidance is welcome.

Hey, according to the docs you should specify a relative path: host/... without the leading /. Hope this helps.

1 Like

I tried it, it did not work :pensive_face: .

trying to use this as reference for now

The error message that you showed comes from elixir_ls, but is the actual compilation failing with the same error?

Also on the screenshot I can see that the zig code in the _build directory, but how did it get there? Is it in the priv directory of your project too?

1 Like

Hi @joelpaulkoch

Thanks for this, I had a mix.task which was updating the build folder, I have changed it to put it in the correct priv.

   @lib  {:priv, "zig/lib/x86_64-linux/libopentui.so"}
   @header  {:priv, "include/"}
  
   use Zig,otp_app: :jace,
    c: [link_lib: @lib,include_dirs: @header,library_dirs: @lib],
    resources: [:RendererResource,
                :OptimizedBufferResource,
                :TextBufferResource],
    nifs: [...]

now does not throw errors in IDE and , can confirm it is picking up the headers, and lib correctly.

however when i run the app it’s not able to find the .so file

20:12:06.886 [error] loading module Elixir.Jace.Bridge {:load_failed, ~c"Failed to load NIF library /home/archon/work/jace/_build/dev/lib/jace/priv/lib/Elixir.Jace.Bridge: 'libopentui.so: cannot open shared object file: No such file or directory'"}

I am re-reading the docs and trying again,

thanks again !!