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/local
的config.site
,所以我想添加一个。当讨论usr/local
的config.site
时,站点默认值上的Autoconf manual 让我有点困惑。它说:
[讨论
/usr
confg.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_spec
和gnutls.spec
提出一个单独的问题(评论是否过多)?这应该可以让您在/usr/local
和lib64
中回答有关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的主要内容,如果未能解决你的问题,请参考以下文章
Fedora dnf gcc 时候警告/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64问题
如何修复 Windows 10 中的 Java rxtxSerial.dll 或 jSSC-2.7_x86_64.dll 串行端口错误?