2017-10-20 126 views
1

我在Fedora 26,x86_64上构建一些基于Autotool的库时遇到问题。 64位Fedora将第三方和供应商库放在/usr/local/lib64中。 Ubuntu 17使用/usr/local/lib,所以相同的项目构建好。Fedora x86_64上供应商库的config.site

我一直在使用--libdir=/usr/local/lib64但三个库抵制它。 /usr/local我缺少config.site,所以我想添加一个。在讨论usr/localconfig.site时,网站默认值的Autoconf manual有点让我感到困惑。它说:

[中/usrconfg.site讨论] ...

同样,在其中64位库默认情况下,建平台, 然后安装在/ usr /本地/ lib64的,而不是的/ usr /本地/ 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' 

我遇到的问题是,是变形例以上附加到/usr/local版本config.site?或者它取代现有的代码块?或者我可以在没有修改的情况下将其复制到其所属的位

或者,也许猫/usr/local/share/config.site看起来像什么?


这是/usrconfig.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

谢谢@约翰。我收集了更多信息。这是一个程序的Fedora spec文件。请注意''gnutls.spec'](http://pkgs.fedoraproject.org/cgit/rpms/gnutls.git/tree/gnutls.spec)中使用'sed'修补'%{_ libdir}'。我想我的下一个问题是,GnuTLS首先通过设置“sys_lib_dlsearch_path_spec”来做正确的事情?看起来Autotools/Autoconf应该推动整个过程。也就是说,'sys_lib_dlsearch_path_spec'摆弄不应该出现,并且应该始终使用'%{libdir}'。 – jww

回答

0

config.site的供应商库在Fedora x86_64的

这回答了什么config.site看起来像/usr/local/share/config.site的问题。它不回答为什么--libdir=/usr/local/lib64无法设置目录的问题,正如@John Bollinger在评论中指出的那样。

/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,已被关闭为非BUG