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.