Getting an app using membrane and ex_libsrtp to work nice with nerves

We’re trying to get GitHub - evercam/ex_nvr: Video recording and computer vision for edge devices working with nerves but having some difficulties with dependencies, mainly ex_libsrtp | Hex, whenever i launch a firmware build i am getting this error

1 Like

That’s probably because ex_nvr is using 1.4.* version of bundlex, our build tool for native code. Updating to v1.5 should fix this issue, but we’re currently experiencing another problem: the firmware is built, but Nerves won’t boot… See Cross compilation issue in membrane_portaudio_plugin [macOS -> Linux] · Issue #781 · membraneframework/membrane_core · GitHub. We’re working on it right now, but it’s quite tough due to no crash dump / logs from nerves. Until it’s fixed you probably won’t be able to run ex_nvr on Nerves :confused:

Thank you very much.

When changing to bundlex 1.5 i have this error, is that what you meant ?

Nope, this should already be fixed too :thinking: Are you sure you’re using Bundlex 1.5?

Yes, only changed bundlex to 1.5 here, also elixir-turboojpeg’s bundlex needed to be updated (just locally for now), and had that error

General formatting tip: it’s better to copy terminal output and paste it between ``` for formatting, instead of taking a picture. That way search engines (both this forum’s and Google etc) can see the text.

2 Likes

Ok, seems we didn’t release this fix :upside_down_face: can you try github master?

Gives the same error as before

After using a custom firmware (adding libsrtp and openssl), i get this error

Hi, it seems that the linker is unable to find the correct libei.a file. Could you check if this file is present in staging/usr/lib? It’s the place where all libs available for nerves are present. The staging directory should be located in custom_rpi4-portable-1.27.0

Can’t seem to find the libbei, should i search for it in the make menuconfig menu?

Yes. Could you also run mix.firmare --store-scripts and share the resulting bundlex.sh file?

This is the content of bundlex.sh

#!/bin/sh
(mkdir -p "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/nif/native_obj") && \
(gcc -fPIC -Wall -Wextra -c -O2 -g -std=c11 -DBUNDLEX_NIF -o "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/nif/native_obj/native.c_743F9CE3CA8BEFE5B8D9AE1D269E058E85435281.o" -I"ex_nvr/deps/bunch_native/c_src/bunch" -I"ex_nvr/deps/bunch_native/c_src/bunch/nif" -I"ex_nvr/deps/shmex/c_src/shmex" -I"ex_nvr/deps/shmex/c_src/shmex/nif" -I"ex_nvr/deps/unifex/c_src/unifex/nif" -I"ex_nvr/deps/bunch_native/c_src/bunch" -I"ex_nvr/deps/bunch_native/c_src/bunch/nif" -I"ex_nvr/deps/shmex/c_src/shmex" -I"ex_nvr/deps/shmex/c_src/shmex/nif" -I"ex_nvr/deps/unifex/c_src/unifex/nif" -I"~/.asdf/installs/erlang/27.1.1/usr/include" -I"ex_nvr/deps/ex_dtls/c_src" "ex_nvr/deps/ex_dtls/c_src/ex_dtls/_generated/nif/native.c"
) && \
(gcc -fPIC -Wall -Wextra -c -O2 -g -std=c11 -DBUNDLEX_NIF -o "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/nif/native_obj/native.c_22330F3D1C6EFDCF6B439D7EC96FB0B5E39F2924.o" -I"ex_nvr/deps/bunch_native/c_src/bunch" -I"ex_nvr/deps/bunch_native/c_src/bunch/nif" -I"ex_nvr/deps/shmex/c_src/shmex" -I"ex_nvr/deps/shmex/c_src/shmex/nif" -I"ex_nvr/deps/unifex/c_src/unifex/nif" -I"ex_nvr/deps/bunch_native/c_src/bunch" -I"ex_nvr/deps/bunch_native/c_src/bunch/nif" -I"ex_nvr/deps/shmex/c_src/shmex" -I"ex_nvr/deps/shmex/c_src/shmex/nif" -I"ex_nvr/deps/unifex/c_src/unifex/nif" -I"~/.asdf/installs/erlang/27.1.1/usr/include" -I"ex_nvr/deps/ex_dtls/c_src" "ex_nvr/deps/ex_dtls/c_src/ex_dtls/native.c"
) && \
(gcc -fPIC -Wall -Wextra -c -O2 -g -std=c11 -DBUNDLEX_NIF -o "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/nif/native_obj/dtls.c_19BE20BA58C78D50B22EF998B9A1BBC0A99CCDBB.o" -I"ex_nvr/deps/bunch_native/c_src/bunch" -I"ex_nvr/deps/bunch_native/c_src/bunch/nif" -I"ex_nvr/deps/shmex/c_src/shmex" -I"ex_nvr/deps/shmex/c_src/shmex/nif" -I"ex_nvr/deps/unifex/c_src/unifex/nif" -I"ex_nvr/deps/bunch_native/c_src/bunch" -I"ex_nvr/deps/bunch_native/c_src/bunch/nif" -I"ex_nvr/deps/shmex/c_src/shmex" -I"ex_nvr/deps/shmex/c_src/shmex/nif" -I"ex_nvr/deps/unifex/c_src/unifex/nif" -I"~/.asdf/installs/erlang/27.1.1/usr/include" -I"ex_nvr/deps/ex_dtls/c_src" "ex_nvr/deps/ex_dtls/c_src/ex_dtls/dtls.c"
) && \
(gcc -fPIC -Wall -Wextra -c -O2 -g -std=c11 -DBUNDLEX_NIF -o "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/nif/native_obj/dyn_buff.c_3C8F1250AED9088DA9EB92A9E8EF6F9C8B128811.o" -I"ex_nvr/deps/bunch_native/c_src/bunch" -I"ex_nvr/deps/bunch_native/c_src/bunch/nif" -I"ex_nvr/deps/shmex/c_src/shmex" -I"ex_nvr/deps/shmex/c_src/shmex/nif" -I"ex_nvr/deps/unifex/c_src/unifex/nif" -I"ex_nvr/deps/bunch_native/c_src/bunch" -I"ex_nvr/deps/bunch_native/c_src/bunch/nif" -I"ex_nvr/deps/shmex/c_src/shmex" -I"ex_nvr/deps/shmex/c_src/shmex/nif" -I"ex_nvr/deps/unifex/c_src/unifex/nif" -I"~/.asdf/installs/erlang/27.1.1/usr/include" -I"ex_nvr/deps/ex_dtls/c_src" "ex_nvr/deps/ex_dtls/c_src/ex_dtls/dyn_buff.c"
) && \
(gcc -rdynamic -shared -o "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/nif/native.so" -Wl,--disable-new-dtags,--whole-archive "ex_nvr/_build/dev/lib/bunch_native/priv/bundlex/lib.a" "ex_nvr/_build/dev/lib/shmex/priv/bundlex/lib.a" "ex_nvr/_build/dev/lib/bunch_native/priv/bundlex/nif/bunch.a" "ex_nvr/_build/dev/lib/shmex/priv/bundlex/nif/shmex.a" "ex_nvr/_build/dev/lib/unifex/priv/bundlex/nif/unifex.a" -Wl,--no-whole-archive "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/nif/native_obj/native.c_743F9CE3CA8BEFE5B8D9AE1D269E058E85435281.o" "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/nif/native_obj/native.c_22330F3D1C6EFDCF6B439D7EC96FB0B5E39F2924.o" "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/nif/native_obj/dtls.c_19BE20BA58C78D50B22EF998B9A1BBC0A99CCDBB.o" "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/nif/native_obj/dyn_buff.c_3C8F1250AED9088DA9EB92A9E8EF6F9C8B128811.o"  -lrt -lrt -lpthread 
) && \
(mkdir -p "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/cnode/native_obj") && \
(gcc  -Wall -Wextra -c -O2 -g -std=c11 -DBUNDLEX_CNODE -o "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/cnode/native_obj/native.c_67F78C6A7CE6EFB0855078773821F7323F5F84C2.o" -I"ex_nvr/deps/unifex/c_src/unifex/cnode" -I"ex_nvr/deps/unifex/c_src/unifex/cnode" -I"~/.asdf/installs/erlang/27.1.1/usr/include" -I"ex_nvr/deps/ex_dtls/c_src" "ex_nvr/deps/ex_dtls/c_src/ex_dtls/_generated/cnode/native.c"
) && \
(gcc  -Wall -Wextra -c -O2 -g -std=c11 -DBUNDLEX_CNODE -o "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/cnode/native_obj/native.c_22330F3D1C6EFDCF6B439D7EC96FB0B5E39F2924.o" -I"ex_nvr/deps/unifex/c_src/unifex/cnode" -I"ex_nvr/deps/unifex/c_src/unifex/cnode" -I"~/.asdf/installs/erlang/27.1.1/usr/include" -I"ex_nvr/deps/ex_dtls/c_src" "ex_nvr/deps/ex_dtls/c_src/ex_dtls/native.c"
) && \
(gcc  -Wall -Wextra -c -O2 -g -std=c11 -DBUNDLEX_CNODE -o "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/cnode/native_obj/dtls.c_19BE20BA58C78D50B22EF998B9A1BBC0A99CCDBB.o" -I"ex_nvr/deps/unifex/c_src/unifex/cnode" -I"ex_nvr/deps/unifex/c_src/unifex/cnode" -I"~/.asdf/installs/erlang/27.1.1/usr/include" -I"ex_nvr/deps/ex_dtls/c_src" "ex_nvr/deps/ex_dtls/c_src/ex_dtls/dtls.c"
) && \
(gcc  -Wall -Wextra -c -O2 -g -std=c11 -DBUNDLEX_CNODE -o "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/cnode/native_obj/dyn_buff.c_3C8F1250AED9088DA9EB92A9E8EF6F9C8B128811.o" -I"ex_nvr/deps/unifex/c_src/unifex/cnode" -I"ex_nvr/deps/unifex/c_src/unifex/cnode" -I"~/.asdf/installs/erlang/27.1.1/usr/include" -I"ex_nvr/deps/ex_dtls/c_src" "ex_nvr/deps/ex_dtls/c_src/ex_dtls/dyn_buff.c"
) && \
(gcc  -o "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/cnode/native" -Wl,--disable-new-dtags,--whole-archive "ex_nvr/_build/dev/lib/unifex/priv/bundlex/cnode/unifex.a" -Wl,--no-whole-archive "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/cnode/native_obj/native.c_67F78C6A7CE6EFB0855078773821F7323F5F84C2.o" "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/cnode/native_obj/native.c_22330F3D1C6EFDCF6B439D7EC96FB0B5E39F2924.o" "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/cnode/native_obj/dtls.c_19BE20BA58C78D50B22EF998B9A1BBC0A99CCDBB.o" "ex_nvr/_build/dev/lib/ex_dtls/priv/bundlex/cnode/native_obj/dyn_buff.c_3C8F1250AED9088DA9EB92A9E8EF6F9C8B128811.o" -L"~/.asdf/installs/erlang/27.1.1/usr/lib" -lpthread -lpthread -lpthread -lei -lpthread 
)