Comments (10)
the lost ARMv6 (RPi 1/Zero (1)) compatibility cry.
I don't think that's coming back, unfortunately.
from userland.
You can install libraspberrypi-dev
(https://www.debian.org/doc/debian-policy/ch-sharedlibs.html). Otherwise, if people need old binaries to work and don't want to install the dev package, buster remains an option.
The problem is now that the official RPi OS Bullseye images ships with symlink from old to new names, obviously created manually on those images
They're not created manually. They come from the -dev package, added there automatically by dh.
The problem is that now when developers are compiling software on these images, it will be again linked to the old names, hence won't solve the issue for users. And by far not all systems are guaranteed to have the symlinks
When you link a program against a symlink, the actual dependency you should see when you run ldd on the binary would be the .so.SOVERSION file.
from userland.
You can install
libraspberrypi-dev
Ah I see. However, it shouldn't be necessary to have development headers installed to execute a binary. Reading the Debian policy that you reasonably follow, it's not clear to me where the issue then is:
- First of all most library packages shipped by the official Debian repository ship
.so
only files or symlinks, sometimes with.so
linking to.so.X
, sometimes the other way round, so the rule to have.so
in development packages only isn't a strict one. glibc itself is shipped as.so
. - More importantly, ALL Debian binary packages ship executables which can run without any development package installed. While for the library names there is no consistency, a strict consistency is the clear separation between library packages for executing binaries and development packages only for compiling binaries.
Otherwise, if people need old binaries to work and don't want to install the dev package, buster remains an option.
Staying on Buster only for running old binaries when all you need is some symlinks? Not an option 😄, here is what one should do when facing the issue:
cd /usr/lib/arm-linux-gnueabihf
while read -r line
do
[[ ! -f $line || -f ${line%.0} ]] && continue
line=${line#/usr/lib/arm-linux-gnueabihf/}
ln -sf "$line" "${line%.0}"
done < <(dpkg -L 'libraspberrypi0' | grep '^/usr/lib/arm-linux-gnueabihf/.*\.so.0$')
When you link a program against a symlink, the actual dependency you should see when you run ldd on the binary would be the .so.SOVERSION file.
Hmm, this contradicts what we see with RPi Cam Control Interface binaries: The symlinks were there and the binaries were linked against paths without the .0
ending. I'll verify.
from userland.
What software are people normally reporting issues with?
However, it shouldn't be necessary to have development headers installed to execute a binary.
Sure, but I'd say that software should be rebuilt to link against the new libraries. patchelf can be used where the source is not available for whatever reason.
- First of all most library packages shipped by the official Debian repository ship
.so
only files or symlinks, sometimes with.so
linking to.so.X
, sometimes the other way round, so the rule to have.so
in development packages only isn't a strict one. glibc itself is shipped as.so
.
On my pi there are 27 runtime packages containing .so files in the standard LD library path compared to 331 development packages. So yes, there are a few exceptions, but they generally have their version already somewhere else in the filename or aren't things you'd link against directly.
- More importantly, ALL Debian binary packages ship executables which can run without any development package installed. While for the library names there is no consistency, a strict consistency is the clear separation between library packages for executing binaries and development packages only for compiling binaries.
And that's where we need to get to as well. I'm aware that we ship chromium built with the old filenames, but that will be fixed.
from userland.
What software are people normally reporting issues with?
Basically with everything that uses this library. Due to intense reports upstream whenever faced, many cases are solved, but e.g. even the RealVNC package shipped by the RPi repo is still pending: RPi-Distro/repo#267
Chromium has been solved/rebuilt, if I'm not mistaken.
Another remaining prominent case is Jellyfin, respectively its dedicated FFmpeg package: jellyfin/jellyfin-ffmpeg#75
And as linked RPi Cam Control, where the binary seems to have been linked against .so
even that those were symlink to .so.0
: silvanmelchior/RPi_Cam_Web_Interface#640
Not sure whether all toolchains/linkers are supposed to resolve/follow symlink. If it turns out to be a toolchain issue, then I'd say it's fine to leave things as they are as earlier or later the remaining cases will be solved with rebuilds.
from userland.
There could be something strange with the build environment for RPi Cam Control. Perhaps it's built on buster or with a run of rpi-update. But in general, all I needed to do for software we have control over was just rebuild it (and everything would've had the -dev package present).
Chromium has been solved/rebuilt, if I'm not mistaken.
Ah, I'm probably thinking of the gtk dependency change then.
from userland.
Ah, I'm probably thinking of the gtk dependency change then.
Ah right, that is still missing, and the lost ARMv6 (RPi 1/Zero (1)) compatibility 😢.
There could be something strange with the build environment for RPi Cam Control.
He compiled new binaries on a fresh Raspberry Pi OS Bullseye image, I'm waiting for reply whether ldd
now shows the correct paths.
from userland.
Probably not such a big issue, considering the expected bad browser experience on those models. Even on RPi 2 it is not awesome 😄.
from userland.
I think this one can be closed, since there doesn't seem to be a problem with the packaging. Other software behaves as intended.
from userland.
Last reply on RPi Cam Web Interface (raspimjpeg
actually) was still resulting in linking to the symlinks, however, it is then probably indeed an issue with the used toolchain. As the libraspberrypi-dev
package with symlinks doesn't have the same effect on other builds, obviously, I'll close.
from userland.
Related Issues (20)
- host_applications/linux/apps/hello_pi/hello_fft/mailbox.h: remove declaration of get_version? HOT 2
- Chromium Crash While Printing(Print Preview) HOT 1
- The `usb-modeswitch-data` package needs to be updated to ( `usb-modeswitch-data` package (2019-11-28 )) HOT 1
- vcos_dummy_thread_cleanup() SEGV when attempting to call function in unloaded lib HOT 2
- vcsm_lock_cache not implemented for /dev/vcsm-cma HOT 1
- glReadPixels from a pixel buffer object yields an empty buffer
- ./buildme doesn't work HOT 7
- Unattended upgrades doesn't work HOT 1
- 64 bit builds fail to produce raspistill, raspivid etc HOT 1
- vcgencmd display_power 0 does not turn off screen after updating Raspberry Pi OS HOT 6
- Changes regarding OMX_Broadcom in arm64 vs legacy rapsbian image HOT 2
- enable USB serial gadget mode by default
- chromium-browser mishandles video playback, hanging the system HOT 2
- Invalid command line option (-roi) HOT 2
- undefined reference to `bcm_host_init' HOT 10
- Alternative of userland in Bullseye HOT 1
- Raspivid Feature Request: BT.709 Levels HOT 2
- Slow chromium-browser start with error "ERROR:network_service_instance_impl.cc(601)] Network service crashed, restarting service."
- dtoverlay: no change to one fragment's target renders `cam0` option unusable HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from userland.