Programowanie w systemie UNIX/depend
Zależności ( ang dependencies)[1]
typy
edytujZależności[4][5] ( ang dependecies) = lista identyfikatorów innych programów, bibliotek, ...
- Zależności wykonawcze: inne programy wymagane do uruchomienia programu
- Zależności programistyczne: inne programy wymagane do opracowania programu, budowania programu, uruchomienia testów
Brak zależności
edytujBrak zależności ( ang. zero dependency)
Zależności zwykle mają zależności, które mają zależności w nieskończoność. Wszystkie te elementy muszą być aktualizowane na wypadek luk w zabezpieczeniach, a czasami pojawia się bałagan w zależnościach od wielu wersji tej samej biblioteki. Dlatego w przypadku małej biblioteki brak zależności może być cechą.[6]
uaktualnianie systemu
edytujsudo apt-get update sudo apt-get autoremove sudo apt-get install -f
Pierwsze polecenie zaktualizuje listę pakietów, drugie usunie wszystkie pakiety, które nie są już potrzebne, a trzecie polecenie zainstaluje wszystkie pakiety, które są potrzebne innym pakietom, ale jeszcze nie zostały zainstalowane.[7]
build-deps
edytujSkrypt basha
#!/bin/sh
OS=`uname`
ID=
DESCR=
REL=
KERNEL=`uname -r`
MACH=`uname -m`
if [ "${OS}" = "Darwin" ] ; then
ID='OS X'
DESCR=`sw_vers -productName`
build=`sw_vers -buildVersion`
REL="`sw_vers -productVersion` ($build)"
elif [ "${OS}" = "Linux" ] ; then
if [ "x`which lsb_release 2>/dev/null`" != "x" ] ; then
ID=`lsb_release -s -i`
DESCR=`lsb_release -s -d | sed s/\"//g | sed s/\ release//`
REL=`lsb_release -s -r`
elif [ -f /etc/redhat-release ] ; then
ID='Red Hat'
DESCR=`cat /etc/redhat-release | sed s/\ release//`
REL=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/fedora-release ] ; then
ID='Fedora'
DESCR=`cat /etc/fedora-release | sed s/\ release//`
REL=`cat /etc/fedora-release | sed s/.*release\ // | sed s/\ .*//`
elif [ -f /etc/SuSE-release ] ; then
ID='openSUSE project'
DESCR=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
REL=`cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //`
fi
fi
echo " "
echo " OS name: $OS"
echo " Distribution: $ID"
echo " Description: $DESCR"
echo " Release: $REL"
echo " Kernel: $KERNEL"
echo " Architecture: $MACH"
echo " "
if [ "$ID" != "" ] ; then
cat <<eof
The following pre-installation steps are required for a GR framework
software installation:
eof
fi
if [ "$ID" = "OS X" ] ; then
cat <<eof
- Install "Xcode" via the Mac App Store and the "Xcode Command Line Tools"
- Install the latest version of XQuartz (http://xquartz.macosforge.org)
eof
elif [ "$ID" = "Red Hat" -o "$ID" = "CentOS" ] ; then
cat <<eof
yum install gcc gcc-c++ gcc-gfortran ghostscript-devel python2 \
texlive-collection-latex texlive-dvipng cmake patch
eof
elif [ "$ID" = "Fedora" ] ; then
cat <<eof
yum install gcc gcc-c++ gcc-gfortran ghostscript-devel python2 \
texlive-collection-latex texlive-dvipng wxGTK-devel glfw-devel zeromq3-devel \
libjpeg-turbo-devel
eof
elif [ "$ID" = "Debian" ] ; then
cat <<eof
apt-get install libx11-dev libxft-dev libxt-dev python2.7 \
libgl1-mesa-dev libgs-dev texlive-latex3 dvipng qt4-dev-tools \
libgtk2.0-dev libwxgtk3.0-dev libglfw3-dev libzmq3-dev cmake
eof
elif [ "$ID" = "Ubuntu" ] ; then
cat <<eof
apt-get install libx11-dev libxft-dev libxt-dev python2.7 \
libgl1-mesa-dev libgs-dev texlive-latex3 dvipng qt4-dev-tools \
libgtk2.0-dev libwxgtk2.8-dev libzmq3-dev cmake
The package libglfw-dev is too old.
eof
elif [ "$ID" = "openSUSE project" ] ; then
cat <<eof
zypper install gcc gcc-c++ gcc-fortran libX11-devel python2 \
texlive-latex texlive-dvipng wxWidgets-devel ghostscript-devel cmake patch
eof
fi
echo " "
lib/build-deps OS name: Linux Distribution: Ubuntu Description: Ubuntu 22.04.2 LTS Release: 22.04 Kernel: 5.19.0-46-generic Architecture: x86_64
The following pre-installation steps are required for a GR framework software installation:
Jak narysować graf zależności?
edytujI used grep and sed to extract the include graph of the source code for this project. Then tred (which edits graph specifications to remove transitive edges. i.e, if A->B and B->C and A->C, it'll remove A->C) showed me a few of my includes were redundant. I used dot to draw the dependencies.[8]
Jak sprawdzić zależności?
edytujBiblioteka
- pakiety
- dev
- non-dev
Program
edytujwykonywalny
edytujZa pomocą komendy ldd[9]
ldd /path/to/program
lub bezpieczniej (program ldd może uruchamiać badany program co jest potencjalnie szkodliwe, gdy pochodzi z nieznanego źródła) [10]
objdump -p /path/to/program | grep NEEDED
readelf -d /bin/ls | grep 'NEEDED'
Żródła
edytujJeśli program był zainstalowany za pomocą autotools to wyszukujemy ( grep) w pliku configure.ac : [13]
- AC_SEARCH_LIBS (
- AC_CHECK_HEADERS
- PKG_CHECK_MODULES
czynny proces
edytujsudo pldd <PID>
sudo pmap <PID>
biblioteki
edytujBiblioteki [14]
- dzielone ( ang. shared library), pliki z rozszerzeniem "so"
dzielone
edytujLista bibliotek dzielonych ( ang. shared library), pliki z rozszerzeniem "so"
ldconfig -p
Sprawdzamy czy są i jakie wersje maja zainstalowane biblioteki "libname" ( nazwa do zmiany) [15]
ldconfig -v | grep libname
Zależności bibliotek dzielonych[16]
Jak znaleźć i dodać zainstalowaną bibliotekę do ścieżki wyszukiwania bibliotek ?[17]
sudo find / -name the_name_of_the_file.so echo $LD_LIBRARY_PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_library/ export LD_LIBRARY_PATH
pakiety
edytujW ubuntu :
sudo apt-get build-dep <package>
lub
dpkg -l | grep -i nazwa_paklietu
sudo apt list --installed | grep -i nazwa_pakietu
Pakiety dev: [18]
to build things based on libfoo, you need libfoo-dev
Jak wyszukiwać pakiety w Ubuntu ?
edytujNarzędzie z Cmake:[19]
find_package(<Package> [version])
Inne spospby[20]
apt-cache showpkg apache2 sudo aptitude search <package_name>
repozytoria pakietów
edytujLista [21]
- plik /etc/apt/sources.list
- pliki w katalogu /etc/apt/sources.list.d/
sudo grep -rhE ^deb /etc/apt/sources.list*
sudo apt-cache policy
pakiet deb
edytujZależności pakietu za pomocą apt:
apt-cache showpkg package-name
apt-cache depends package-name
lub apt-file [22]
apt-file search fontconfig/fontconfig.h
lub [23]
dpkg -I package.deb
lub rekursywnie (zależności zależności: "it resolves dependencies recursively, i.e., not only does it show the direct dependencies of a package, but also the dependencies' dependencies.")[24]
apt-rdepends package
odwrotne
edytujPakiety zależne od pakietu (reverse dependencies):
apt-cache rdepends package-name
Jak uruchomić stary program na nowym systemie ?
edytujZobacz również
edytuj- wikipedia: Piekło zależności
- autoapt[28]
- checkinstall
- autodeb
- biicode is a c/c++ dependency manager.
Źródła
edytuj- ↑ askubuntu question: what-are-dependencies
- ↑ stackoverflow question: find-a-directory-in-shared-library-search-path
- ↑ ostechnix: list-dependencies-package-linux
- ↑ Zależność oprogramowania w wikipedii
- ↑ progsbase docs: programs
- ↑ reddit AskProgramming: why is zero dependencies seen as a good thing in
- ↑ askubuntu question: cant-install-several-development-libraries
- ↑ m-trustworthy by Claude
- ↑ man ldd
- ↑ How to check what libraries are used by a program or process on Linux Posted on August 7, 2014 by Dan Nanni
- ↑ unix.stackexchange question how-to-find-out-the-dynamic-libraries-executables-loads-when-run
- ↑ stackoverflow question how-do-i-find-the-direct-shared-object-dependencies-of-a-linux-elf-binary
- ↑ unix.stackexchange question: get-list-of-required-libraries-when-installing-something-from-source
- ↑ yolinux TUTORIAL: LibraryArchives-StaticAndDynamic
- ↑ linuxquestions : bash-command-to-list-installed-libraries-and-version-numbers
- ↑ simplified.guide: linux show-shared-library-dependency
- ↑ stackoverflow question: linux-error-while-loading-shared-libraries-cannot-open-shared-object-file-no-s
- ↑ stackoverflow question: how-to-install-gtk-development-dependencies-on-ubuntu
- ↑ https://cmake.org/cmake/help/book/mastering-cmake/chapter/Finding%20Packages.html
- ↑ makeuseof : how-to-search-for-packages-ubuntu
- ↑ tecadmin : view-installed-repositories-in-ubuntu
- ↑ apt-file command with examples by Computer Hope
- ↑ askubuntu question how-can-i-check-dependency-list-for-a-deb-package
- ↑ checking-package-dependencies-with-apt-rdepends-on-debian-ubuntu
- ↑ ubuntu blog: how-to-preserve-old-software-with-snaps
- ↑ help.ubuntu : VirtualMachines
- ↑ osboxes : ubuntu
- ↑ AutoApt