/usr/lib/x86_64-linux-gnu
および/usr/lib/i386-linux-gnu/
および/usr/lib/arm-linux-gnueabihf
のような、ホストのデフォルトのマルチアーカイブフォルダーにライブラリをインストールするメイクファイルを作成したい。
ただし、dpkg-architecture
およびdebhelper
はホストデバイスに常に存在するとは限らないため、使用しません。
gcc
とmake
のみを使用します。
すでに/etc/ld.so.conf.d
フォルダーを見つけました。そこから* .confファイルを解析できますが、これは正しいアプローチですか?マルチアーカイブフォルダーは常に存在しますか?
もう1つの方法は、ldconfig -v | grep /usr/lib/
のコンテンツを解析し、最初の結果を取得することです(コロンを削除します)。
これを行う簡単な方法はありますか?
見つけたメソッドのスクリプトを投稿します。ただし、別のデフォルトの方法がある場合は、投稿してください。
Ldconfigの使用:
ldconfig -v 2>>/dev/null | grep /usr/lib* | head --lines=1 | sed -e 's/://'
誰かが別の検索順序を設定すると、別のフォルダを返すことができると思います。デフォルトのホストmultiarchフォルダーの前に別のフォルダーを追加します。
/etc/ld.so.conf.d
フォルダーの使用:
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
/usr/lib
の行の後の*Multiarch*
の下にある最初のフォルダーを返します。
両方のスクリプトは、armv7およびx86_64(デフォルトのインストール、外部アーキテクチャなし)でテストし、期待される結果を返しました。
外部アーキテクチャがインストールされているボックスではテストされていません。
Perlスクリプトであるdpkg-architecture
に従いました。
$ 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
i386
インストールgcc -dumpmachine
レポートi686-linux-gnu
で、欠点になる可能性のあることの1つ。 /usr/lib/i686-linux-gnu
はldconfig
リストにあるため、/usr/lib/i386-linux-gnu
と同じすぎないため、正常に機能します。ただし、Ubuntuによってデフォルトで作成されるフォルダーは/usr/lib/i386-linux-gnu
です。