Fedora x86_64 上供应商库的 config.site

Posted

技术标签:

【中文标题】Fedora x86_64 上供应商库的 config.site【英文标题】:config.site for vendor libs on Fedora x86_64 【发布时间】:2018-04-01 13:21:37 【问题描述】:

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

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

[讨论/usrconfg.site的版本] ...

同样,在默认构建 64 位库的平台上, 然后安装在 /usr/local/lib64 而不是 /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 版本?还是它会替换现有的代码块?还是我可以直接复制到它所属的地方而不做修改?

或者,/usr/local/share/config.site 的猫长什么样子?


这是config.site/usr。我不清楚它是否需要修改或如何修改。

$ 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

【问题讨论】:

我开始写一个问题的答案,但我认为这会浪费时间。如果明确指定 --libdir 选项不会导致您的库转到您想要的位置,那么添加或修改站点默认值似乎也不太可能达到目的。默认值的重点主要是避免您必须手动指定安装位置,但您已经过了那个位置。 我建议查看指导相关库构建的 Makefile.am(假设 Automake 正在运行)。修改它以遵守您指定的 libdir 应该不会太难。但是,请考虑它是否可能是有目的的,它还没有这样做。 谢谢@John。我收集了更多信息。这是其中一个程序的 Fedora 规范文件。注意使用sed 修补%_libdir 中的gnutls.spec。我想我的下一个问题是,GnuTLS 是否首先通过设置sys_lib_dlsearch_path_spec 来做正确的事情?似乎 Autotools/Autoconf 应该驱动整个过程。也就是说,sys_lib_dlsearch_path_spec 不应出现,%libdir 应始终使用。 @JohnBollinger - 我是否应该针对sys_lib_dlsearch_path_specgnutls.spec 提出一个单独的问题(评论是否过多)?这应该可以让您在/usr/locallib64 中回答有关config.site 的问题,而不必担心行为不端的项目。然后,在新问题中,您可以使用sys_lib_dlsearch_path_spec 解决问题。 再次感谢@John。网站上还有一个问题……Incorrect @libdir@ when using config.site? Autoconf 给我留下的问题多于答案…… 【参考方案1】:

用于 Fedora x86_64 上的供应商库的 config.site

这回答了config.site/usr/local/share/config.site 的关系。正如@John Bollinger 在 cmets 中指出的那样,它没有回答为什么 --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 "libdir=@libdir@" in *.pc file 的一个未解决问题,已作为NOT A BUG关闭。

【讨论】:

以上是关于Fedora x86_64 上供应商库的 config.site的主要内容,如果未能解决你的问题,请参考以下文章

Rpmyum;磁盘储存与文件系统;网络基础

Fedora dnf gcc 时候警告/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64问题

fedora安装chrome报错

ganglia安装简记

如何修复 Windows 10 中的 Java rxtxSerial.dll 或 jSSC-2.7_x86_64.dll 串行端口错误?

ubuntu如何下载64位Intel