Hi,
I am trying to write a elixir client for
https://github.com/sst/opentui.git
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.
I tried it, it did not work
.
https://github.com/acalejos/archive/blob/main/lib/archive/nif.ex
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?
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 !!