config.site Fedora 上的供应商库 x86_64
config.site for vendor libs on Fedora x86_64
我在 Fedora 26 上构建一些基于 Autotool 的库时遇到问题,x86_64。 64 位 Fedora 将第三方和供应商库放在 /usr/local/lib64
中。 Ubuntu 17 使用 /usr/local/lib
所以相同的项目可以构建。
我一直在使用 --libdir=/usr/local/lib64
但三个图书馆拒绝使用它。 /usr/local
缺少 config.site
,所以我想添加一个。在讨论 usr/local
的 config.site
时,站点默认值上的 Autoconf manual 让我有点困惑。它说:
[discussion of /usr
version of confg.site
] ...
Likewise, on platforms where 64-bit libraries are built by default,
then installed in /usr/local/lib64 instead of /usr/local/lib, it is
appropriate to install /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
的猫长什么样?
这是 /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
config.site for vendor libs on Fedora x86_64
这回答了 config.site
看起来像 /usr/local/share/config.site
的问题。正如@John 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 "libdir=@libdir@" in *.pc file 上的一个悬而未决的问题,已作为 NOT A BUG.
关闭
我在 Fedora 26 上构建一些基于 Autotool 的库时遇到问题,x86_64。 64 位 Fedora 将第三方和供应商库放在 /usr/local/lib64
中。 Ubuntu 17 使用 /usr/local/lib
所以相同的项目可以构建。
我一直在使用 --libdir=/usr/local/lib64
但三个图书馆拒绝使用它。 /usr/local
缺少 config.site
,所以我想添加一个。在讨论 usr/local
的 config.site
时,站点默认值上的 Autoconf manual 让我有点困惑。它说:
[discussion of
/usr
version ofconfg.site
] ...Likewise, on platforms where 64-bit libraries are built by default, then installed in /usr/local/lib64 instead of /usr/local/lib, it is appropriate to install /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
的猫长什么样?
这是 /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
config.site for vendor libs on Fedora x86_64
这回答了 config.site
看起来像 /usr/local/share/config.site
的问题。正如@John 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 "libdir=@libdir@" in *.pc file 上的一个悬而未决的问题,已作为 NOT A BUG.