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
Also Liked
ityonemo
Popular in Questions
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible.
total = 10
while total != 0
...
New
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
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
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
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors:
[WARN] - (starship::utils): Executing command ...
New
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
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
Hi!
In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir?
Searched the docs for ip address and the web, no good results.
Thanks!
New
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible.
total = 10
while total != 0
...
New
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
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
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
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
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex










