jonas

jonas

Compatability of exqlite/Sqlite3, Escript and WSL2?

Hi,
I developed a small program that uses ecto + ecto_sqlite3 and as a nested dependency exqlite.
The program works fine when I execute it with mix run, but when I try to compile it to an escript fails to run.

It crashes right at the startup with the following warning + error messages:

13:22:19.172 [warn]  The on_load function for module Elixir.Exqlite.Sqlite3NIF returned:
{:function_clause,
 [
   {:filename, :join, [{:error, :bad_name}, 'sqlite3_nif'],
    [file: 'filename.erl', line: 454]},
   {Exqlite.Sqlite3NIF, :load_nifs, 0,
    [file: 'lib/exqlite/sqlite3_nif.ex', line: 14]},
   {:code_server, :"-handle_on_load/5-fun-0-", 1,
    [file: 'code_server.erl', ...]}
 ]}


13:22:19.211 [debug] Websocket connection up on worker #PID<0.231.0>

13:22:19.169 [error] Process #PID<0.296.0> raised an exception
** (FunctionClauseError) no function clause matching in :filename.join/2
    (stdlib 3.15.1) filename.erl:454: :filename.join({:error, :bad_name}, 'sqlite3_nif')
    (exqlite 0.6.1) lib/exqlite/sqlite3_nif.ex:14: Exqlite.Sqlite3NIF.load_nifs/0
    (kernel 8.0.1) code_server.erl:1317: anonymous fn/1 in :code_server.handle_on_load/5

13:22:19.204 [error] GenServer #PID<0.286.0> terminating
** (RuntimeError) connect raised UndefinedFunctionError exception. The exception details are hidden, as they may contain sensitive data such as database credentials. You may set :show_sensitive_data_on_connection_error to true when starting your connection if you wish to see all of the details
    (exqlite 0.6.1) Exqlite.Sqlite3NIF.open/1
    (exqlite 0.6.1) lib/exqlite/connection.ex:402: Exqlite.Connection.do_connect/2
    (db_connection 2.4.0) lib/db_connection/connection.ex:82: DBConnection.Connection.connect/2
    (connection 1.1.0) lib/connection.ex:622: Connection.enter_connect/5
    (stdlib 3.15.1) proc_lib.erl:226: :proc_lib.init_p_do_apply/3
Last message: nil
State: Exqlite.Connection

It ‘may’ be relate to a warning that is logged during compilation of the exqlite dependency:

In file included from /usr/include/string.h:494:0,
                 from sqlite3/sqlite3.c:14232:
In function ‘memcpy’,
    inlined from ‘rbuGetUpdateStmt.constprop’ at sqlite3/sqlite3.c:201606:5,
    inlined from ‘rbuStep’ at sqlite3/sqlite3.c:202418:7,
    inlined from ‘sqlite3rbu_step’ at sqlite3/sqlite3.c:202651:24:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:34:10: warning: ‘__builtin_memcpy’: specified size between 18446744071562067968 and 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Wstringop-overflow=]
   return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Has anyone ever encountered similar problems with exqlite?

Since it works fine when it’s executed with mix run, might it be related to some incompatibility related to WSL2? Or could it be another reason entirely?

Thanks in advance.

Most Liked

kevinlang

kevinlang

Hey,

The root error is:

    (stdlib 3.15.1) filename.erl:454: :filename.join({:error, :bad_name}, 'sqlite3_nif')
    (exqlite 0.6.1) lib/exqlite/sqlite3_nif.ex:14: Exqlite.Sqlite3NIF.load_nifs/0

Which comes from the line of code where we load our NIF:

  def load_nifs() do
    path = :filename.join(:code.priv_dir(:exqlite), 'sqlite3_nif')
    :erlang.load_nif(path, 0)
  end

It looks like this is because the priv/ directory is not supproted in escript.

It looks like NIFs in general cannot work in escript. Bummer.

Where Next?

Popular in Questions Top

srinivasu
How to handle excepions in elixir? Suppose i have A, B, C ,D, E modules. and each module has get() function. A.get() method will call th...
New
yawaramin
In the Dialyzer docs ( http://erlang.org/doc/man/dialyzer.html#requesting-or-suppressing-warnings-in-source-files ), there is a way to tu...
New
tduccuong
Hi, is there any work on GUI with Elixir, that is similar to Electron/Javascript? My idea is to bundle Phoenix and BEAM into a single se...
New
Werner
Hi, I’m using Ubuntu 18.04 and after updating to OTP-24.0 yesterday i have this warning when I run “mix local.hex”: 14:57:30.512 [warn] ...
New
logicmason
Hi there, I'm working through my first release with elixir/phoenix. I've built a release with distillery and found that it crashes when I...
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
hpopp
To simplify some tasks at work, I wrote and published this package yesterday. It’s a simple macro that enables Access behaviour on struct...
New

Other popular topics Top

dotdotdotPaul
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
chrismccord
This release brings a number of exciting features, including integration with the new Phoenix LiveDashboard and Phoenix LiveView. There h...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
lucidguppy
I have a super simple question about elixir - how would I take a file like this foo bar baz and output a new file that enumerates 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
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

We're in Beta

About us Mission Statement