Je veux créer un makefile qui installe une bibliothèque dans le dossier multi-Arch par défaut de l'hôte, comme /usr/lib/x86_64-linux-gnu
et /usr/lib/i386-linux-gnu/
et /usr/lib/arm-linux-gnueabihf
.
Mais sans utiliser dpkg-architecture
et debhelper
car ils ne sont pas toujours présents sur le périphérique hôte.
Utiliser uniquement gcc
et make
.
J'ai déjà trouvé le /etc/ld.so.conf.d
dossier. Je pourrais analyser les fichiers * .conf à partir de là, mais est-ce une approche correcte? Le dossier multi-Arch sera toujours là?
Une autre méthode que j'ai bien analysée est le contenu de ldconfig -v | grep /usr/lib/
et obtenir le premier résultat (suppression du collon).
Existe-t-il un moyen plus simple de procéder?
Je publierai les scripts des méthodes que j'ai trouvées. Mais s'il existe un autre moyen par défaut, veuillez le poster.
Utilisation de ldconfig:
ldconfig -v 2>>/dev/null | grep /usr/lib* | head --lines=1 | sed -e 's/://'
Je suppose qu'il peut retourner un autre dossier si quelqu'un configure un autre ordre de recherche, par exemple. en ajoutant un autre dossier avant le dossier multiarchives par défaut de l'hôte.
En utilisant le /etc/ld.so.conf.d
dossier:
lines=$(cat /etc/ld.so.conf.d/* 2>>/dev/null)
for line in $lines ; do
case "$line" in
*Multiarch*)
found_multiarch=1
;;
/usr/lib/*)
if [ "$found_multiarch" = 1 ] ; then
folder=$line
break
fi
;;
esac
done
echo $folder
Il renverra le premier dossier sous /usr/lib
qui vient après la ligne avec *Multiarch*
.
Les deux scripts ont testé sur armv7 et x86_64 (installations par défaut, pas d'architectures étrangères) et ont renvoyé les résultats attendus.
Non testé dans des boîtiers avec une architecture étrangère installée.
J'ai suivi dpkg-architecture
qui n'est qu'un script Perl:
$ which dpkg-architecture
/usr/bin/dpkg-architecture
$ file /usr/bin/dpkg-architecture
/usr/bin/dpkg-architecture: a /usr/bin/Perl script, UTF-8 Unicode text executable
$ more /usr/bin/dpkg-architecture
use Dpkg::Arch qw(get_raw_build_Arch get_raw_Host_Arch get_Host_gnu_type
debarch_to_cpuattrs
get_valid_arches debarch_eq debarch_is debarch_to_debtriplet
debarch_to_gnutriplet gnutriplet_to_debarch
debarch_to_multiarch);
$ man Dpkg::Arch
$ locate "Dpkg/Arch"
/usr/share/Perl5/Dpkg/Arch.pm
$ more /usr/share/Perl5/Dpkg/Arch.pm
## this may fails if multi-Arch is not supported
$ dpkg --print-architecture
AMD64
## it seems this what are you looking for
$ gcc -dumpmachine
x86_64-linux-gnu
Une chose qui pourrait être un inconvénient, dans i386
installation gcc -dumpmachine
rapports i686-linux-gnu
. Cela fonctionnera bien parce que /usr/lib/i686-linux-gnu
est dans ldconfig
liste trop identique à /usr/lib/i386-linux-gnu
; Cependant, le dossier créé par défaut par Ubuntu est /usr/lib/i386-linux-gnu
.