* [Buildroot] [PATCH 1/1] package/mjpg-streamer: fix undefined symbol error
@ 2024-03-24 18:56 Bernd Kuhls
2024-05-10 19:49 ` Thomas Petazzoni via buildroot
0 siblings, 1 reply; 3+ messages in thread
From: Bernd Kuhls @ 2024-03-24 18:56 UTC (permalink / raw)
To: buildroot
Fixes runtime error:
dlopen: /usr/lib/mjpg-streamer/input_uvc.so: undefined symbol: resolutions_help
Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
---
...ix-undefined-symbol-resolutions_help.patch | 27 +++++++++++++++++++
1 file changed, 27 insertions(+)
create mode 100644 package/mjpg-streamer/0001-input_uvc-fix-undefined-symbol-resolutions_help.patch
diff --git a/package/mjpg-streamer/0001-input_uvc-fix-undefined-symbol-resolutions_help.patch b/package/mjpg-streamer/0001-input_uvc-fix-undefined-symbol-resolutions_help.patch
new file mode 100644
index 0000000000..f7feb2bb07
--- /dev/null
+++ b/package/mjpg-streamer/0001-input_uvc-fix-undefined-symbol-resolutions_help.patch
@@ -0,0 +1,27 @@
+From 32bd867cc8a51568c031430a2886712438052945 Mon Sep 17 00:00:00 2001
+From: Bernd Kuhls <bernd@kuhls.net>
+Date: Sat, 9 Mar 2024 23:15:52 +0100
+Subject: [PATCH] input_uvc: fix 'undefined symbol: resolutions_help'
+
+Upstream: https://github.com/jacksonliam/mjpg-streamer/pull/401
+
+Signed-off-by: Bernd Kuhls <bernd@kuhls.net>
+---
+ mjpg-streamer-experimental/plugins/input_uvc/CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/mjpg-streamer-experimental/plugins/input_uvc/CMakeLists.txt b/mjpg-streamer-experimental/plugins/input_uvc/CMakeLists.txt
+index 72b24fa..90bbfa0 100644
+--- a/mjpg-streamer-experimental/plugins/input_uvc/CMakeLists.txt
++++ b/mjpg-streamer-experimental/plugins/input_uvc/CMakeLists.txt
+@@ -22,6 +22,7 @@ if (PLUGIN_INPUT_UVC)
+ MJPG_STREAMER_PLUGIN_COMPILE(input_uvc dynctrl.c
+ input_uvc.c
+ jpeg_utils.c
++ ../../utils.c
+ v4l2uvc.c)
+
+ if (V4L2_LIB)
+--
+2.39.2
+
--
2.39.2
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [Buildroot] [PATCH 1/1] package/mjpg-streamer: fix undefined symbol error
2024-03-24 18:56 [Buildroot] [PATCH 1/1] package/mjpg-streamer: fix undefined symbol error Bernd Kuhls
@ 2024-05-10 19:49 ` Thomas Petazzoni via buildroot
2024-08-05 22:21 ` Thomas Petazzoni via buildroot
0 siblings, 1 reply; 3+ messages in thread
From: Thomas Petazzoni via buildroot @ 2024-05-10 19:49 UTC (permalink / raw)
To: Bernd Kuhls; +Cc: buildroot
Hello Bernd,
On Sun, 24 Mar 2024 19:56:59 +0100
Bernd Kuhls <bernd@kuhls.net> wrote:
> +diff --git a/mjpg-streamer-experimental/plugins/input_uvc/CMakeLists.txt b/mjpg-streamer-experimental/plugins/input_uvc/CMakeLists.txt
> +index 72b24fa..90bbfa0 100644
> +--- a/mjpg-streamer-experimental/plugins/input_uvc/CMakeLists.txt
> ++++ b/mjpg-streamer-experimental/plugins/input_uvc/CMakeLists.txt
> +@@ -22,6 +22,7 @@ if (PLUGIN_INPUT_UVC)
> + MJPG_STREAMER_PLUGIN_COMPILE(input_uvc dynctrl.c
> + input_uvc.c
> + jpeg_utils.c
> ++ ../../utils.c
> + v4l2uvc.c)
Thanks for the patch. Are you sure this is the right fix?
Indeed, the way I understand it is that there is a main executable
(mjpg-streamer), which loads using dlopen() a number of plugins. This
symbol resolutions_help is already provided by the mjpg-streamer main
executable itself, so why can't the dlopen()'ed plugin use it? Here
you're basically duplicating this symbol into the plugin itself. Is
that the right way to fix this issue? I am not sure 100% clear on what
are the rules that allow a dlopen() library to use the symbols of the
"thing" that dlopen()s the plugin, but it seems like it is possible.
Also, there is another plugin, input_opencv, which uses the exact same
symbol, so it would also need to be fixed.
Opinion from upstream here would be greatly appreciated to see how they
chose to design their code base.
Thanks!
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Buildroot] [PATCH 1/1] package/mjpg-streamer: fix undefined symbol error
2024-05-10 19:49 ` Thomas Petazzoni via buildroot
@ 2024-08-05 22:21 ` Thomas Petazzoni via buildroot
0 siblings, 0 replies; 3+ messages in thread
From: Thomas Petazzoni via buildroot @ 2024-08-05 22:21 UTC (permalink / raw)
To: Thomas Petazzoni via buildroot; +Cc: Bernd Kuhls, Thomas Petazzoni
Hello Bernd,
On Fri, 10 May 2024 21:49:57 +0200
Thomas Petazzoni via buildroot <buildroot@buildroot.org> wrote:
> Thanks for the patch. Are you sure this is the right fix?
>
> Indeed, the way I understand it is that there is a main executable
> (mjpg-streamer), which loads using dlopen() a number of plugins. This
> symbol resolutions_help is already provided by the mjpg-streamer main
> executable itself, so why can't the dlopen()'ed plugin use it? Here
> you're basically duplicating this symbol into the plugin itself. Is
> that the right way to fix this issue? I am not sure 100% clear on what
> are the rules that allow a dlopen() library to use the symbols of the
> "thing" that dlopen()s the plugin, but it seems like it is possible.
>
> Also, there is another plugin, input_opencv, which uses the exact same
> symbol, so it would also need to be fixed.
>
> Opinion from upstream here would be greatly appreciated to see how they
> chose to design their code base.
Since I had no feedback from you on this question, I had a deeper look,
and indeed your proposed fix is incorrect: the plugin should really
call into the resolutions_help() function of the mjpg_streamer
executable.
It doesn't work because the resolutions_help() symbol is not explicitly
exported *and* we are stripping our executables.
An easy solution is to export all symbols of the main binary, which can
be achieved by adding:
set_property(TARGET mjpg_streamer PROPERTY ENABLE_EXPORTS ON)
into the CMakeLists.txt file. A better solution would be to only export
those symbols which are needed by the plugins, but obviously it
requires a bit more work.
I couldn't test at runtime, but before my patch, I can clearly see that
the stripped mjpg_streamer no longer has any symbol table containing
resolutions_help(), while after my patch it contains a symbol table
with this symbol.
Could you give it a try and report back?
Thanks a lot!
Thomas
--
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-08-05 22:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-24 18:56 [Buildroot] [PATCH 1/1] package/mjpg-streamer: fix undefined symbol error Bernd Kuhls
2024-05-10 19:49 ` Thomas Petazzoni via buildroot
2024-08-05 22:21 ` Thomas Petazzoni via buildroot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox