Repository navigation
v0.2.6
cross-libc dlopen v0.2.6
Load the host's GPU drivers into a process that carries its own libc.
See the README
for what the two gaps are and which one your symptom is.
Every artefact is held to its own build's glibc floor, read out of
build-manifest.json rather than stated here. An object needing a symbol
version above its floor would fail to load inside a bundle whose glibc is
older, so the build refuses to produce one and the packaging step refuses
to publish one.
| architecture | floor glibc |
|---|---|
| aarch64 | 2.31 |
| loongarch64 | 2.36 |
| ppc64le | 2.31 |
| riscv64 | 2.31 |
| x86_64 | 2.31 |
Changes
Since v0.2.5:
- Stop the shim defining __stack_chk_guard where the loader owns it (#39)
What each artefact needs
Read from build-manifest.json, which is built from the objects
themselves and ships inside both archives.
aarch64
| artefact | max GLIBC_ |
SONAME | entry points | sha256 |
|---|---|---|---|---|
cross-libc-dlopen.so |
2.17 | n/a | 2 | df3c762a4d46063b773e173e6ec02e193602cd39f9411a08a505a49ac13ca7e2 |
gl-fwd.so |
2.17 | libGL.so.1 |
3470 | 1bfda51b9c417c00e702b905decf053fcb28159fa958b17ddc158606ccf0c884 |
egl-fwd.so |
2.17 | libEGL.so.1 |
44 | 839b65103b75da456ef0d2bd5c8f95c1f61bbfb5524b2d10f070b1648114fda2 |
gles-fwd.so |
2.17 | libGLESv2.so.2 |
358 | 79248f2db688432490e3ae0971ab94821d8aff5498ad752295d0b5a63daa64e9 |
runtime-select |
2.17 | n/a | 0 | 2998e21dfcf1f98791ecb679eb76dfc439bed4ef473a75abe8ea8293211e0d17 |
Compiler: aarch64-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110
loongarch64
| artefact | max GLIBC_ |
SONAME | entry points | sha256 |
|---|---|---|---|---|
cross-libc-dlopen.so |
2.36 | n/a | 2 | 97eb00e0b144ba822e154acf0033cef2297d9503cdabdcee5deba117ba995b99 |
gl-fwd.so |
2.36 | libGL.so.1 |
3470 | 453320ebe523e9c95d4d62bafc89e11b440b3a92a7692bc6e801f643695c97b8 |
egl-fwd.so |
2.36 | libEGL.so.1 |
44 | f772d3d0cb5d3878ede9f28a43523531b42e47e6e583dcf12a95dca599e6e6c5 |
gles-fwd.so |
2.36 | libGLESv2.so.2 |
358 | d1634741cd323fdfc349d7dd6dae93aee0a4936d9ba770cade0ed8e9995ee830 |
runtime-select |
2.36 | n/a | 0 | ec9223cae6872322a865f4b360b5e300f23dbc8b16f59429ed5fd774d97bf0fc |
Compiler: loongarch64-linux-gnu-gcc (Debian 14.2.0-19) 14.2.0
ppc64le
| artefact | max GLIBC_ |
SONAME | entry points | sha256 |
|---|---|---|---|---|
cross-libc-dlopen.so |
2.22 | n/a | 0 | dc200bb29e734e09233a7fb6113fc80933aa7936b3ef3bfe99dd323c57bdda78 |
gl-fwd.so |
2.22 | libGL.so.1 |
3470 | 7ddbbe306b667063043bb007b729c696e000c7c3f1dee86e3662953661fe4167 |
egl-fwd.so |
2.22 | libEGL.so.1 |
44 | 1333a78ab77caf55323ac05150cde1df09f0e54a37208abbf7290543feb82d2a |
gles-fwd.so |
2.22 | libGLESv2.so.2 |
358 | ac7b049eb5b95e93c3016c5694386e8ca0ce7501a07094a16be8246e3fc93b54 |
runtime-select |
2.17 | n/a | 0 | 898fba9baa9a6f026358264a422ee8c0985e491aa845fc3e949a9531818efc43 |
Compiler: powerpc64le-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110
riscv64
| artefact | max GLIBC_ |
SONAME | entry points | sha256 |
|---|---|---|---|---|
cross-libc-dlopen.so |
2.27 | n/a | 2 | 6d9299b56a729a82d264c12dedbc69df0f57a92f2b476a3e37fcdb1637c1f153 |
gl-fwd.so |
2.27 | libGL.so.1 |
3470 | c6d1fee9e969ff736a410955bc0b9e9b7ffde90a283b8bc434ca08f9b70b5a7d |
egl-fwd.so |
2.27 | libEGL.so.1 |
44 | cf1f79ca2c526b58359c5b874b3011baf4aa666cf6d52d58a04cdf6017a6bf19 |
gles-fwd.so |
2.27 | libGLESv2.so.2 |
358 | b131f76e8829b6142a569239155626716aa3bbaffe06626b668891e4b5052b14 |
runtime-select |
2.27 | n/a | 0 | 1ae8cec1042df5469974ccfcfa19b9915ae9ed074a002ea8f42bedd02a7223a3 |
Compiler: riscv64-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110
x86_64
| artefact | max GLIBC_ |
SONAME | entry points | sha256 |
|---|---|---|---|---|
cross-libc-dlopen.so |
2.16 | n/a | 2 | 63129854b553a8af6f19a3b54a97e19059f90ae67bc4342d0e2d03fc80c92478 |
gl-fwd.so |
2.14 | libGL.so.1 |
3470 | 86911484c93882bd4b58a319b4d6e0e4a85177eaf14e5550841cd44413badd95 |
egl-fwd.so |
2.14 | libEGL.so.1 |
44 | 706544c2fd64c006adf13f4cc65e073e335d84f05d6dc90cbaef9baaa0fec4c1 |
gles-fwd.so |
2.14 | libGLESv2.so.2 |
358 | fcf4f5ee6306c1ad44a3a473ff3f7efddb8c1d1eba2e34213f68ed388e8af78c |
runtime-select |
2.14 | n/a | 0 | 7c32cd98f7aece42a55fa9d3b58f9ae88e6f6f60dfcfbec76d05f1a9f682575d |
Compiler: gcc (Debian 10.2.1-6) 10.2.1 20210110
Assets
Each artefact ships three ways: loose, in the .tar, and in the .zip.
⛔ No archive contains a directory, so an extract drops the files where
you are standing.
⭐ One variant. The objects read CROSS_LIBC_DLOPEN_ROOT, with
APPDIR as the fallback, because an AppImage runtime exports APPDIR
into every process it starts and CROSS_LIBC_DLOPEN_ROOT wins when both
are set. The build asks for no CET flag: measured, the flag adds six
endbr64 to the shims and cannot produce the IBT property note, so it does
no protective work here. A consumer who wants a build reading only this
project's name makes it at build time: cd src && make portable.
| asset | sha256 |
|---|---|
aarch64-cross-libc-dlopen.so |
df3c762a4d46063b773e173e6ec02e193602cd39f9411a08a505a49ac13ca7e2 |
aarch64-egl-fwd.so |
839b65103b75da456ef0d2bd5c8f95c1f61bbfb5524b2d10f070b1648114fda2 |
aarch64-gl-fwd.so |
1bfda51b9c417c00e702b905decf053fcb28159fa958b17ddc158606ccf0c884 |
aarch64-gles-fwd.so |
79248f2db688432490e3ae0971ab94821d8aff5498ad752295d0b5a63daa64e9 |
aarch64-runtime-select |
2998e21dfcf1f98791ecb679eb76dfc439bed4ef473a75abe8ea8293211e0d17 |
cross-libc-dlopen-aarch64.tar |
a25ad081d1d7d0181ecce0cf4af70ddaa8d6dca9999401bc5cf7a71469ea24b2 |
cross-libc-dlopen-aarch64.zip |
624269500e3e8685ec2cfe8f3eaa2ef60650b9d50203d74ba151703afcfa9407 |
cross-libc-dlopen-loongarch64.tar |
31ab481a27d4c87e811b409be28b9e3bf2f5c871f8534b35b81d0917e6936991 |
cross-libc-dlopen-loongarch64.zip |
4347021246fa65981cb7b9c55e6ceaa424b0f2163b5c927db0362095cfcfa276 |
cross-libc-dlopen-ppc64le.tar |
7a186c988c1825e2422aa7a4d31cb63763256c5c734e66f854cacf14196f8458 |
cross-libc-dlopen-ppc64le.zip |
28d04411fa712ad2f39afc9fdf3ae28da1d71f72e90903c025eed0bdc949db78 |
cross-libc-dlopen-riscv64.tar |
05a8c47f32e36185120e57666c92f8cff651f1e93dc4f9d0d4e2f5fded460899 |
cross-libc-dlopen-riscv64.zip |
2cc273a34873958744ef90bee3e345df3497418503c7bf42a13356dc4e76c1d4 |
cross-libc-dlopen-x86_64.tar |
ba3a017077596634c09563dd89b5a7a5c2e215a00d5f266a976f536f32a3903d |
cross-libc-dlopen-x86_64.zip |
9b16a83486f7b7a3f566ef846cdb74ca8fd2ac4d3a4465f9f026e09286a3cd69 |
loongarch64-cross-libc-dlopen.so |
97eb00e0b144ba822e154acf0033cef2297d9503cdabdcee5deba117ba995b99 |
loongarch64-egl-fwd.so |
f772d3d0cb5d3878ede9f28a43523531b42e47e6e583dcf12a95dca599e6e6c5 |
loongarch64-gl-fwd.so |
453320ebe523e9c95d4d62bafc89e11b440b3a92a7692bc6e801f643695c97b8 |
loongarch64-gles-fwd.so |
d1634741cd323fdfc349d7dd6dae93aee0a4936d9ba770cade0ed8e9995ee830 |
loongarch64-runtime-select |
ec9223cae6872322a865f4b360b5e300f23dbc8b16f59429ed5fd774d97bf0fc |
ppc64le-cross-libc-dlopen.so |
dc200bb29e734e09233a7fb6113fc80933aa7936b3ef3bfe99dd323c57bdda78 |
ppc64le-egl-fwd.so |
1333a78ab77caf55323ac05150cde1df09f0e54a37208abbf7290543feb82d2a |
ppc64le-gl-fwd.so |
7ddbbe306b667063043bb007b729c696e000c7c3f1dee86e3662953661fe4167 |
ppc64le-gles-fwd.so |
ac7b049eb5b95e93c3016c5694386e8ca0ce7501a07094a16be8246e3fc93b54 |
ppc64le-runtime-select |
898fba9baa9a6f026358264a422ee8c0985e491aa845fc3e949a9531818efc43 |
riscv64-cross-libc-dlopen.so |
6d9299b56a729a82d264c12dedbc69df0f57a92f2b476a3e37fcdb1637c1f153 |
riscv64-egl-fwd.so |
cf1f79ca2c526b58359c5b874b3011baf4aa666cf6d52d58a04cdf6017a6bf19 |
riscv64-gl-fwd.so |
c6d1fee9e969ff736a410955bc0b9e9b7ffde90a283b8bc434ca08f9b70b5a7d |
riscv64-gles-fwd.so |
b131f76e8829b6142a569239155626716aa3bbaffe06626b668891e4b5052b14 |
riscv64-runtime-select |
1ae8cec1042df5469974ccfcfa19b9915ae9ed074a002ea8f42bedd02a7223a3 |
x86_64-cross-libc-dlopen.so |
63129854b553a8af6f19a3b54a97e19059f90ae67bc4342d0e2d03fc80c92478 |
x86_64-egl-fwd.so |
706544c2fd64c006adf13f4cc65e073e335d84f05d6dc90cbaef9baaa0fec4c1 |
x86_64-gl-fwd.so |
86911484c93882bd4b58a319b4d6e0e4a85177eaf14e5550841cd44413badd95 |
x86_64-gles-fwd.so |
fcf4f5ee6306c1ad44a3a473ff3f7efddb8c1d1eba2e34213f68ed388e8af78c |
x86_64-runtime-select |
7c32cd98f7aece42a55fa9d3b58f9ae88e6f6f60dfcfbec76d05f1a9f682575d |
⚠ The artefact rows above come from the manifest. The archive rows are
computed here, because the archives did not exist when it was written.
Using it
LD_PRELOAD=/path/to/cross-libc-dlopen.so CROSS_LIBC_DLOPEN=1 ./your-program
For a bundle, put the objects in its lib/ and name them in .preload.
The switches are in the README and
docs/integrating.md
has the detail per target.