Hermanverschooten

Hermanverschooten

Undefined symbol when using zigler and C file

This my first time using zig and zigler.

I am trying to use the embedded library for wireguard.
I have in the same folder, wireguard.h, wireguard.c and wireguard.ex.
The Wireguard module has

defmodule Wireguard do
  use Zig,
    otp_ap: :wg_man,
    c_src: [{"wireguard.c", ["-Wall"]}],
    include_dir: "."

  ~Z"""
  const std = @import("std");
  const crypto = std.crypto;
  const log = std.log.scoped(.wireguard);

  const wireguard = @cImport({
    @cInclude("wireguard.h");
  });

  pub fn list_devices() void {
    var deviceNames: [*c]u8 = null;
 
   deviceNames = wireguard.wg_list_device_names() orelse null;

    defer std.c.free(@ptrCast(?*anyopaque, deviceNames));

    if (deviceNames == null) {
        log.err("Unable to get device names", .{});
        return;
    }
  }
  """

When I try to mix compile, I get the following error:

== Compilation error in file lib/wireguard/wireguard.ex ==
** (MatchError) no match of right hand side value: ["error: ld.lld: undefined symbol: wg_list_device_names\n    note: referenced by .Elixir.Wireguard.zig:13 (/home/herman/Projects/wg_man/lib/wireguard/.Elixir.Wireguard.zig:13)\n    note:               /home/herman/.cache/zig/o/f3cd82336c77b73ffaead67d9007ba46/sema.o:(.Elixir.Wireguard.list_devices)"]
    (zigler 0.10.2) lib/zig/compile_error.ex:11: Zig.CompileError.to_error/2
    (zigler 0.10.2) lib/zig/sema.ex:88: Zig.Sema.run_sema!/3
    (zigler 0.10.2) lib/zig/compiler.ex:76: Zig.Compiler.compile/4
    (zigler 0.10.2) expanding macro: Zig.Compiler.__before_compile__/1
    lib/wireguard/wireguard.ex:1: Wireguard (module)

This function is defined in wireguard.c, so why is it not being found?
If I remove the body from the zig function it compiles and when I look at the exported functions in the generated Elixir.Wireguard.so I do find all the functions there.
I am probably missing something, but I have no clue where to start looking.

Marked As Solved

ityonemo

ityonemo

@Hermanverschooten should be fixed in 0.10.3, feel free to reopen bug report if it doesn’t work.

Also Liked

ityonemo

ityonemo

this is a bug in zigler. I think i know how to fix it, thanks for the report.

Hermanverschooten

Hermanverschooten

@ityonemo Yes! It works, thanks for the fantastic job!

Where Next?

Popular in Questions Top

aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? Ecto.Repo — Ecto v3.14.0 has exampl...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
fayddelight
I tried installing elixir 1.11.2 erlang 23.3.4 via asdf in my zsh shell. Enabled the versions locally and globally. When I list them ...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New

Other popular topics Top

nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement