2017-10-20 5 views
1

Fedora 26、x86_64にいくつかのAutotoolベースのライブラリを構築できません。 64ビットFedoraはサードパーティ製のライブラリとベンダーライブラリを/usr/local/lib64に置きます。 Ubuntu 17は/usr/local/libを使用しているので、同じプロジェクトでOKです。Fedora x86_64のベンダーlibsのconfig.site

私は--libdir=/usr/local/lib64を使用していましたが、3つのライブラリがそれに抵抗しています。私は/usr/localのためにconfig.siteが足りないので、私は1つを追加しようとしています。 usr/localconfig.siteについて議論すると、Autoconf manualはサイトのデフォルトで少し混乱します。/usr/local/lib64にして

は同様に、64ビットのライブラリがデフォルトで組み込まれているプラ​​ットフォームでは、 はその後、インストール...

[confg.site/usrバージョンの議論]の代わりに:それは言います/ usr/local/libに、それは/usr/local/share/config.siteをインストールするための適切な です:

# /usr/local/share/config.site for platforms that prefer 
# the directory /usr/local/lib64 over /usr/local/lib. 
test "$libdir" = '${exec_prefix}/lib' && libdir='${exec_prefix}/lib64' 

私が午前問題は、あるに追加上記の変形例であり、バージョンconfig.site?それとも、既存のコードブロックを置き換えるのでしょうか?あるいは、それを変更せずにそのままコピーすることはできますか?

または、おそらく、/usr/local/share/config.siteの猫はどのように見えますか?


/usrの場合はconfig.siteです。その変更が必要な場合、または修正する必要があるかどうかはわかりません。

$ cat /usr/share/config.site 
# This is the config.site file to satisfy FHS defaults when installing below 
# /usr. 
# 
# You may override this file by your config.site using the CONFIG_SITE env 
# variable. 
# 
# Note: This file includes also RHEL/Fedora fix for installing libraries into 
# "/lib/lib64" on 64bit systems. 

if test -n "$host"; then 
    # skip when cross-compiling 
    return 0 
fi 

if test "$prefix" = /usr \ 
    || { test "$prefix" = NONE && test "$ac_default_prefix" = /usr ; } 
then 
    test "$sysconfdir" = '${prefix}/etc' && sysconfdir=/etc 
    test "$sharedstatedir" = '${prefix}/com' && sharedstatedir=/var 
    test "$localstatedir" = '${prefix}/var' && localstatedir=/var 

    ARCH=`uname -m` 
    for i in x86_64 ppc64 s390x aarch64; do 
     if test $ARCH = $i; then 
      test "$libdir" = '${exec_prefix}/lib' && libdir='${exec_prefix}/lib64' 
      break 
     fi 
    done 
fi 
+2

私は質問に答えを書くようになったが、時間が無駄だと思う。明示的に '--libdir'オプションを指定してもライブラリが必要な場所に移動しない場合は、サイトのデフォルトを追加したり変更したりすることはやりにくいようです。デフォルトのポイントは、設置場所を手作業で指定する必要がなくなりますが、すでにそれを過ぎています。 –

+0

私は、関係するライブラリのビルドを指示するMakefile.am(Automakeが動作していると仮定します)を調べることをお勧めします。指定したlibdirを尊重するためにそれを変更するのはあまり難しいことではありません。しかし、それがまだそうしていないことが目的であるかもしれないかどうかを検討してください。 –

+0

ありがとう@ジョン。私はいくつかの情報を集めました。これらのプログラムの1つにFedora仕様ファイルがあります。 ['gnutls.spec'](http://pkgs.fedoraproject.org/cgit/rpms/gnutls.git/tree/gnutls.spec)の中の'%{_ libdir} 'にパッチを当てるのに' sed'を使うことに注目してください。私の次の質問は、最初に 'sys_lib_dlsearch_path_spec'を設定してGnuTLSが正しいことをしているのでしょうか? Autotools/Autoconfはプロセス全体を動かすべきだと思われます。つまり、 'sys_lib_dlsearch_path_spec'手札は存在してはならず、全体を通して'%{libdir} 'を使用しなければなりません。 – jww

答えて

0

のFedora x86_64の上のベンダーのLIBSのためのconfig.site

これはconfig.site/usr/local/share/config.siteについてどのように見えるかの質問に答えます。 @Bohn Bollingerがコメントで指摘したように、--libdir=/usr/local/lib64がディレクトリを設定できない理由についての質問には答えません。

/usr/local/share/config.siteが間違っています。 Fedoraのconfig.siteからコピーされ、/usr/local/shareに置かれても、プレフィックスディレクトリは間違っています。接頭辞テストは、/usr/localで、/usrではありません。

以下は修正されたものです。

$ cat /usr/local/share/config.site 
... 

if test -n "$host"; then 
    # skip when cross-compiling 
    return 0 
fi 

if test "$prefix" = /usr/local \ 
    || { test "$prefix" = NONE && test "$ac_default_prefix" = /usr/local ; } 
then 
    test "$sysconfdir" = '${prefix}/etc' && sysconfdir=/etc 
    test "$sharedstatedir" = '${prefix}/com' && sharedstatedir=/var 
    test "$localstatedir" = '${prefix}/var' && localstatedir=/var 

    ARCH=`uname -m` 
    for i in x86_64 ppc64 s390x aarch64; do 
     if test $ARCH = $i; then 
      test "$libdir" = '${exec_prefix}/lib' && libdir='${exec_prefix}/lib64' 
      break 
     fi 
    done 
fi 

ただし、これらが正しいかどうかはわかりません。彼らは修正されませんでした。

test "$sysconfdir" = '${prefix}/etc' && sysconfdir=/etc 
test "$sharedstatedir" = '${prefix}/com' && sharedstatedir=/var 
test "$localstatedir" = '${prefix}/var' && localstatedir=/var 

さて、次の質問は、なぜFedoraの/usr/share/config.siteが正しくprefix=/usr/localを処理していません。それはIssue 1510073 : Autoconf does not honor libdir in config.site for "[email protected]@" in *.pc fileの未解決の質問です。これはではなく、として閉じられています。