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’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New
I’ve read in another post that it may be possible with a router helper - but I couldn’t find an appropriate one, and tbh, I’m still just ...
New
Lets say I have map like this fetching from my database
%{"_id" => #BSON.ObjectId<58eb1a7a9ad169198c3dXXXX>, "email" => ...
New
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
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
What is the idiomatic way of matching for not nil in Elixir?
E.g.,
First way:
defp halt_if_not_signed_in(conn, signed_in_account) when...
New
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors:
[WARN] - (starship::utils): Executing command ...
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
Hi there,
I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
I would like to know what is the best IDE for elixir development?
New
What is the proper way to load a module from a file in to IEX?
In the python world, doing something like this pretty standard:
from ....
New
Credo is smart enough to check for (something like) this:
assert length(the_list) == 0
with this response:
Checking if an enum is empt...
New
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
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
- #forms
- #api
- #metaprogramming
- #security
- #hex









