Het programma maakt deel uit van de Xenomai-testsuite, gecompileerd van Linux-pc naar Linux+Xenomai ARM-toolchain.
# echo $LD_LIBRARY_PATH
/lib
# ls /lib
ld-2.3.3.so libdl-2.3.3.so libpthread-0.10.so
ld-linux.so.2 libdl.so.2 libpthread.so.0
libc-2.3.3.so libgcc_s.so libpthread_rt.so
libc.so.6 libgcc_s.so.1 libstdc++.so.6
libcrypt-2.3.3.so libm-2.3.3.so libstdc++.so.6.0.9
libcrypt.so.1 libm.so.6
# ./clocktest
./clocktest: error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No such file or directory
EDIT: OK Ik merkte niet dat de .1 aan het einde deel uitmaakte van de bestandsnaam. Wat betekent dat toch?
Antwoord 1, Autoriteit 100%
update
Hoewel wat ik hieronder schrijf, is het waar als algemeen antwoord over gedeelde bibliotheken, ik denk dat de meest voorkomende oorzaak van dit soort bericht is, is omdat u een pakket hebt geïnstalleerd, maar niet de “-dev” -versie van dat pakket hebt geïnstalleerd.
Nou, het is niet liegen – er is geen libpthread_rt.so.1
in die aanbieding. U hoeft deze waarschijnlijk opnieuw te configureren en opnieuw te bouwen, zodat het afhangt van de bibliotheek die u hebt, of installeert alles wat biedt libpthread_rt.so.1
.
Over het algemeen zijn de nummers na de .so versnummers, en zul je vaak ontdekken dat ze symlinks naar elkaar zijn, dus als je versie 1.1 van libfoo hebt, heb je een echt bestand libfoo. .1.0 en symlinks foo.so en foo.so.1 wijzend naar de libfoo.so.1.0. En als u versie 1.1 installeert zonder de andere te verwijderen, heeft u een libfoo.so.1.1, en libfoo.so.1 en libfoo.so zal nu wijzen op de nieuwe, maar elke code die vereist is Gebruik het bestand Libfoo.so.0.0. Code die net op de versie 1 API vertrouwt, maar maakt het niet uit of het 1,0 of 1.1 is, Libfoo.so.1 opgeven. Zoals ORIP wees in de opmerkingen, dit wordt goed uitgelegd op http://tldp.org/howto/program-library-howto/shared-libraries.html .
In uw geval kunt u weggaan met symlinking libpthread_rt.so.1
naar libpthread_rt.so
. Geen garanties dat het uw code niet zal breken en uw tv-diners opeten.
Antwoord 2, Autoriteit 268%
Uw bibliotheek is een dynamische bibliotheek.
U moet het besturingssysteem vertellen waar het op looptijd kan vinden.
om dit te doen,
We moeten die eenvoudige stappen doen:
(1) Zoek waar de bibliotheek is geplaatst als u het niet weet.
sudo find / -name the_name_of_the_file.so
(2) Controleer op het bestaan van de dynamische bibliotheekpadomgeving variabele (LD_LIBRARY_PATH
)
$ echo $LD_LIBRARY_PATH
Als er niets te weergeven is, voegt u een standaard padwaarde toe (of niet als u wilt)
$ LD_LIBRARY_PATH=/usr/local/lib
(3) We voegen het verlangenpad toe, exporteren en proberen de toepassing.
Merk op dat het pad de map moet zijn waar de path.so.something
is.
Dus als path.so.something
is in /my_library/path.so.something
het zou moeten zijn:
$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_library/
$ export LD_LIBRARY_PATH
$ ./my_app
Bron: https: //www.gnu. Org / Software / GSL / DOC / HTML / Usage.html # Gedeelde-bibliotheken
Antwoord 3, Autoriteit 128%
Hier zijn een paar oplossingen die u kunt proberen:
LDCONFIG
Zoals Abiusx opmerkte: als u nu net de bibliotheek hebt geïnstalleerd, moet u eenvoudig uitvoeren ldconfig .
sudo ldconfig
LDCONFIG maakt de benodigde links en cache naar de meest recente
gedeelde bibliotheken gevonden in de mappen gespecificeerd op de opdracht
regel, in het bestand /etc/ld.so.conf, en in de vertrouwde mappen
(/lib en /usr/lib).
Gewoonlijk zorgt uw pakketbeheerder hiervoor wanneer u een nieuwe bibliotheek installeert, maar niet altijd, en het kan geen kwaad om ldconfig uit te voeren, zelfs als dat niet uw probleem is.
Ontwikkelingspakket of verkeerde versie
Als dat niet werkt, zou ik ook de suggestie van Paulbekijken en een “-dev”-versie zoeken van de bibliotheek. Veel bibliotheken zijn opgesplitst in dev- en niet-dev-pakketten. U kunt deze opdracht gebruiken om ernaar te zoeken:
apt-cache search <libraryname>
Dit kan ook helpen als je gewoon de verkeerde versie van de bibliotheek hebt geïnstalleerd. Sommige bibliotheken worden tegelijkertijd in verschillende versies gepubliceerd, bijvoorbeeld Python.
Bibliotheeklocatie
Als je zeker weet dat het juiste pakket is geïnstalleerd en ldconfig het niet heeft gevonden, staat het misschien in een niet-standaard directory. Standaard zoekt ldconfig in /lib
, /usr/lib
en mappen die worden vermeld in /etc/ld.so.conf
en $LD_LIBRARY_PATH
. Als uw bibliotheek zich ergens anders bevindt, kunt u de map op zijn eigen regel toevoegen in /etc/ld.so.conf
, het pad van de bibliotheek toevoegen aan $LD_LIBRARY_PATH
, of verplaats de bibliotheek naar /usr/lib
. Voer vervolgens ldconfig
uit.
Probeer het volgende om erachter te komen waar de bibliotheek is:
sudo find / -iname *libraryname*.so*
(Vervang libraryname
door de naam van uw bibliotheek)
Als je de route $LD_LIBRARY_PATH
volgt, moet je dat in je bestand ~/.bashrc
zetten, zodat het elke keer dat je inlogt wordt uitgevoerd:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library
Antwoord 4, autoriteit 23%
U moet ervoor zorgen dat u het bibliotheekpad specificeert tijdens
koppelen wanneer u uw .c-bestand compileert:
gcc -I/usr/local/include xxx.c -o xxx -L/usr/local/lib -Wl,-R/usr/local/lib
Het -Wl,-R
deel vertelt het resulterende binaire bestand om ook naar de bibliotheek te zoeken
in /usr/local/lib
tijdens runtime voordat u die in /usr/lib/
probeert te gebruiken.
Antwoord 5, autoriteit 18%
Probeer LD_LIBRARY_PATH
, dat zoekpaden aangeeft, toe te voegen aan uw ~/.bashrc
-bestand
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path_to_your_library
Het werkt!
Antwoord 6, autoriteit 9%
De referentiepagina van linux.org legt de mechanica uit, maar legt niets uit van de motivatie erachter 🙁
Zie daarvoor de Sun Linker and Libraries Guide
Bovendien moet u er rekening mee houden dat “externe versiebeheer” grotendeels achterhaald is op Linux, omdat symboolversiebeheer (een GNU-extensie) u in staat stelt meerdere incompatibele versies van dezelfde functie in een enkele bibliotheek aanwezig te hebben. Met deze extensie kon glibc de afgelopen 10 jaar dezelfde externe versie hebben: libc.so.6
.
Antwoord 7, autoriteit 5%
cd /home/<user_name>/
sudo vi .bash_profile
voeg deze regels aan het einde toe
LD_LIBRARY_PATH=/usr/local/lib:<any other paths you want>
export LD_LIBRARY_PATH
Antwoord 8, autoriteit 4%
Ik had een soortgelijke fout en deze werd niet opgelost door LD_LIBRARY_PATH op te geven in ~/.bashrc .
Wat mijn probleem heeft opgelost, is door het .conf-bestand toe te voegen en te laden.
Ga naar terminal en be in su.
gedit /etc/ld.so.conf.d/myapp.conf
Voeg je bibliotheekpad toe aan dit bestand en sla het op (bijvoorbeeld: /usr/local/lib).
U moet de volgende opdracht uitvoeren om het pad te activeren:
ldconfig
Verifieer uw nieuwe bibliotheekpad:
ldconfig -v | less
Als dit je bibliotheekbestanden toont, ben je klaar om te gaan.
Antwoord 9, autoriteit 3%
Een andere mogelijke oplossing, afhankelijk van uw situatie.
Als je weet dat libpthread_rt.so.1 hetzelfde is als libpthread_rt.so, dan kun je een symbolische link maken door:
ln -s /lib/libpthread_rt.so /lib/libpthread_rt.so.1
Dan zou ls -l /lib
nu de symbolische link moeten tonen en waar deze naar verwijst.
Antwoord 10, autoriteit 3%
Ik had deze fout bij het uitvoeren van mijn applicatie met Eclipse CDT op Linux x86.
Om dit op te lossen:
- In Eclipse:
Uitvoeren als -> Configuraties uitvoeren -> Omgeving
-
Stel het pad in
LD_LIBRARY_PATH=/my_lib_directory_path
Antwoord 11
probeer sudo lib32z1 te installeren
sudo apt-get install lib32z1
Antwoord 12
Het enige wat ik hoefde te doen was rennen:
sudo apt-get install libfontconfig1
Ik bevond me in de map op /usr/lib/x86_64-linux-gnu
en het werkte perfect.
Antwoord 13
Als u uw toepassing op Microsoft Windows uitvoert, moet het pad naar dynamische bibliotheken (.dll) worden gedefinieerd in de omgevingsvariabele PATH.
Als u uw toepassing op UNIX uitvoert, moet het pad naar uw dynamische bibliotheken (.so) worden gedefinieerd in de omgevingsvariabele LD_LIBRARY_PATH.
Antwoord 14
De fout treedt op omdat het systeem niet kan verwijzen naar het genoemde bibliotheekbestand. Voer de volgende stappen uit:
- Als u
locate libpthread_rt.so.1
uitvoert, wordt het pad weergegeven van alle bestanden met die naam. Laten we aannemen dat een pad/home/user/loc
is. - Kopieer het pad en voer
cd home/USERNAME
uit. Vervang GEBRUIKERSNAAM door de naam van de huidige actieve gebruiker waarmee u het bestand wilt uitvoeren. - Voer
vi .bash_profile
uit en voeg aan het einde van de parameterLD_LIBRARY_PATH
, net voor.
de regel/lib://home/usr/loc:.
. Sla het bestand op. - Sluit terminal en start de applicatie opnieuw. Het zou moeten werken.
Antwoord 15
Ik gebruik Ubuntu 18.04
Het installeren van het corresponderende “-dev” pakket werkte voor mij,
sudo apt install libgconf2-dev
Ik kreeg de onderstaande foutmelding totdat ik het bovenstaande pakket installeerde,
turtl: error while loading shared libraries: libgconf-2.so.4: cannot open shared object file: No such file or directory
Antwoord 16
Ik kreeg deze foutmelding en ik denk dat het dezelfde reden is voor jou
error while loading shared libraries: libnw.so: cannot open shared object
file: No such file or directory
Probeer dit eens. Permissies corrigerenvoor bestanden:
cd /opt/Popcorn (or wherever it is)
chmod -R 555 * (755 if not ok)
chown -R root:root *
“sudo su” om permissies op je bestandssysteem te krijgen.
Antwoord 17
Ik kreeg deze foutmelding en ik denk dat het dezelfde reden is als die van jou
fout bij het laden van gedeelde bibliotheken: libnw.so: kan gedeelde bibliotheken niet openen
objectbestand: geen dergelijk bestand of map
Probeer dit eens. Rechten op bestanden corrigeren:
cd /opt/Popcorn (or wherever it is)
chmod -R 555 * (755 if not ok)
Antwoord 18
vergelijkbaar probleem hier gevonden: https://bugzilla.redhat.com/show_bug. cgi?id=1456202
Ik heb de genoemde oplossing geprobeerd en het werkt echt.
De oplossingen in de vorige vragen kunnen werken. Maar ik denk dat dit een makkelijke manier is om het op te lossen.
Probeer het pakket libwbclient
opnieuw te installeren
in fedora:
dnf reinstall libwbclient
Antwoord 19
Wil je toevoegen, als je bibliotheken zich in een niet-standaard pad bevinden, voer dan ldconfig
uit gevolgd door het pad.
Ik moest bijvoorbeeld uitvoeren:
sudo ldconfig /opt/intel/oneapi/mkl/2021.2.0/lib/intel64
om R te laten compileren tegen Intel MKL