web-dev-qa-db-ja.com

Host Multi-Archデフォルトフォルダーの決定方法

/usr/lib/x86_64-linux-gnuおよび/usr/lib/i386-linux-gnu/および/usr/lib/arm-linux-gnueabihfのような、ホストのデフォルトのマルチアーカイブフォルダーにライブラリをインストールするメイクファイルを作成したい。

ただし、dpkg-architectureおよびdebhelperはホストデバイスに常に存在するとは限らないため、使用しません。

gccmakeのみを使用します。

すでに/etc/ld.so.conf.dフォルダーを見つけました。そこから* .confファイルを解析できますが、これは正しいアプローチですか?マルチアーカイブフォルダーは常に存在しますか?

もう1つの方法は、ldconfig -v | grep /usr/lib/のコンテンツを解析し、最初の結果を取得することです(コロンを削除します)。

これを行う簡単な方法はありますか?

3
Bernardo Ramos

見つけたメソッドのスクリプトを投稿します。ただし、別のデフォルトの方法がある場合は、投稿してください。

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(デフォルトのインストール、外部アーキテクチャなし)でテストし、期待される結果を返しました。

外部アーキテクチャがインストールされているボックスではテストされていません。

1
Bernardo Ramos

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-gnuldconfigリストにあるため、/usr/lib/i386-linux-gnuと同じすぎないため、正常に機能します。ただし、Ubuntuによってデフォルトで作成されるフォルダーは/usr/lib/i386-linux-gnuです。

1
user.dz