在 Fedora 23 上制作 vim 时如何修复此错误
How can I fix this error when making vim on Fedora 23
我正在尝试在我的 Fedora 23
上使用以下选项构建 vim
我想要 +python +python3 +perl +lua +ruby +gui +conceal +gui
一些插件。
我找不到内置所有这些的版本(所以我自己做了)
旅程始于跟随Valloric
sudo yum install -y ruby ruby-devel lua lua-devel luajit \
luajit-devel ctags git python python-devel \
python3 python3-devel tcl-devel \
perl perl-devel perl-ExtUtils-ParseXS \
perl-ExtUtils-XSpp perl-ExtUtils-CBuilder \
perl-ExtUtils-Embed
我也有 ncurses
(原始、开发、静态、...)
然后
$ cd $HOME/Sources
$ git clone https://github.com/vim/vim.git
$ cd vim
$ ./configure --with-tlib=ncurses \
--with-features=huge \
--enable-fail-if-missing \
--enable-luainterp=yes \
--enable-mzschemeinterp \
--enable-perlinterp \
--enable-pythoninterp=yes \
--with-python-config-dir=/usr/lib64/python2.7/config \
--enable-python3interp=yes \
--enable-tclinterp=yes \
--enable-rubyinterp=yes \
--enable-cscope \
--enable-multibyte \
--enable-gui=auto \
--prefix=$HOME/Build/vim \
--with-compiledby=statquant | tee configure.log
屏幕上打印以下内容:
/home/statquant/Sources/vim/src/config-PyMake3137:1478: warning: overriding recipe for target 'Modules/_math.o'
/home/statquant/Sources/vim/src/config-PyMake3137:1475: warning: ignoring old recipe for target 'Modules/_math.o'
/home/statquant/Sources/vim/src/config-PyMake3137:1517: warning: overriding recipe for target 'Modules/timemodule.o'
/home/statquant/Sources/vim/src/config-PyMake3137:1482: warning: ignoring old recipe for target 'Modules/timemodule.o'
configure: error: NOT FOUND!
You need to install a terminal library; for example ncurses.
Or specify the name of the library with --with-tlib.
那我
make | tee make.log
我意识到它实际上在 $HOME/Sources/vim/src
而不是 $HOME/Build/vim
中构建了 vim(也许我的期望是错误的)
当我 运行 :version
在 ./vim -g
上(vim 已经构建了 GUI 支持)有
否 python 否 python3 ....
configure.log
是 there, make.log
is there
EDIT1:以下作品,我现在只怀念+perl +ruby
./configure --with-features=huge \
--enable-tclinterp=yes \
--enable-luainterp=yes \
--enable-pythoninterp=yes \
--enable-python3interp=yes \
--with-compiledby=statquant \
--prefix=$HOME/Build/vim \
make install # and yes it installs in $HOME/Build/vim
EDIT2
这是我尝试添加
时发生的情况
- +perl
我可以运行
./configure --with-features=huge \
--enable-tclinterp=yes \
--enable-luainterp=yes \
--enable-pythoninterp=yes \
--enable-python3interp=yes \
--enable-perlinterp=yes \
--prefix=$HOME/Build/vim \
--with-compiledby=statquant | tee configure.log
似乎有效(没有错误):configure.log
make | tee make.log
[...]
cc1: error: -Wformat-security ignored without -Wformat [-Werror=format-security]
<command-line>:0:0: warning: "_FORTIFY_SOURCE" redefined
<command-line>:0:0: note: this is the location of the previous definition
cc1: some warnings being treated as errors
make[1]: *** [objects/option.o] Error 1
Makefile:2907: recipe for target 'objects/option.o' failed
make[1]: Leaving directory '/home/statquant/Sources/vim/src'
make: *** [first] Error 2
Makefile:26: recipe for target 'first' failed
我没有 vim
内置 /home/statquant/Sources/vim/src
: make.log
+ruby
./configure --with-features=huge \
--enable-tclinterp=yes \
--enable-luainterp=yes \
--enable-pythoninterp=yes \
--enable-python3interp=yes \
--enable-rubyinterp=yes \
--prefix=$HOME/Build/vim \
--with-compiledby=statquant |三通 configure.log
它甚至没有 运行 configure
checking --with-tlib argument... empty: automatic terminal library selection
checking for tgetent in -ltinfo... no
checking for tgetent in -lncurses... no
checking for tgetent in -ltermlib... no
checking for tgetent in -ltermcap... no
checking for tgetent in -lcurses... no
no terminal library found
checking for tgetent()... configure: error: NOT FOUND!
You need to install a terminal library; for example ncurses.
Or specify the name of the library with --with-tlib.
这是日志:configure.log
您已启用 -Werror=format-security
。这会将当前被视为“错误”的 printf
或 scanf
格式的任何易受影响的用法。
您可以修复 if_perl.c
中的用法,我相信这是生成的文件。或删除标志 -Werror=format-security
python 问题是...
--with-python-config-dir=/usr/lib64/python2.7/config \
--enable-python3interp=yes \
带有版本 3 解释器的版本 2 配置。
你缺少 ncurses-devel
库,我可以看到你从配置中删除了它。
sudo yum install ncurses-devel
configure
实际上对我有用,即使我没有安装 perl 开发包,即要求我安装它们并没有失败,我觉得这很奇怪。您是否安装了所有需要的开发包。
sudo yum install perl-devel
sudo yum install ruby-devel
如果您缺少 ruby 或 perl 的一些开发包,配置脚本会这样说:"disabling this option"。刚刚用 ruby 做了这个。安装 ruby-dev 软件包后,ruby 选项在 vim 中启用。与 libperl-dev 相同。
好的...事情就是这样。 VIM 是那些有大量补丁的程序之一,Fedora 在 GCC 级别强制执行一些安全检查,不允许您从源代码构建它 (容易)代码,我的建议:重建源 rpm,并不难:
安装重建所需的依赖项VIM
这些软件包是您在 F23
中构建 VIM 所必需的
sudo dnf install gtk2-devel ncurses-devel lua-devel perl-devel perl-ExtUtils-Embed perl-ExtUtils-ParseXS perl-ExtUtils-XSpp perl-ExtUtils-CBuilder python-devel python3-devel tcl-devel ruby-devel
安装球拍存储库
我看到你传递了 --enable-mzschemeinterp
标志,它需要球拍,官方回购中没有。
cat >/etc/yum.repos.d/rpm-sphere.repo <<EOF
[rpm-sphere]
name=RPM Sphere
baseurl=http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_23/
gpgkey=http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_23/repodata/repomd.xml.key
enabled=1
gpgcheck=1
EOF
安装 RPM 开发者工具:
这些是将工具安装到 build/rebuild rpms
所必需的
sudo dnf install @development-tools
sudo dnf install fedora-packager
sudo dnf install rpmdevtools
设置您的 RPM 构建根目录
在您的主文件夹中创建一个名为 rpmmacros
的文件,如下所示:
vim ~/.rpmmacros
添加以下内容:
%_topdir /home/statquant/Src/rpm
然后创建文件夹/home/statquant/Src/rpm
创建 RPM 构建必要的文件夹
您需要有这些文件夹,以便在安装源 rpm 时存储源代码和规范文件:
mkdir -p ~/Src/rpm
cd ~/Src/rpm
mkdir BUILD RPMS SOURCES SPECS SRPMS
mkdir RPMS/{noarch,x86,x86_64}
下载 VIM 源 RPM:
dnf dnl --source vim
这会将源 rpm 下载到当前文件夹,比如 vim-7.4.1718-1.fc23.src.rpm
下载完成后,安装它:
rpm -ivh vim-7.4.1718-1.fc23.src.rpm
安装后 RPM 应该会创建文件 /home/statquant/Src/rpm/SPECS/vim.spec
打开此文件。
修改配置选项
您会看到 SPEC 文件具有配置选项和构建实际内容的 make 命令。这个文件很大,而且有很多补丁。您可以继续修改configure命令所在的区域,有3个:
- 一个 vim 最小
- 一个 vim 增强
- 一个用于 vim
的 GUI 版本
确保进行相应的修改。我用你的选项做了一个测试构建。你可以下载我的 SPEC file here,和 vim,vim-enhanced 和 gvim 工作得很好。
重建 RPM
修改(或从我的模板复制)要基于该规范构建 RPM 的规范文件后,转到 /home/statquant/Src/rpm
,然后:
rpmbuild -ba SPECS/vim.spec
这需要一段时间,之后,您应该会看到一些输出表明包已成功构建,在我的例子中:
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/gustavo/Src/rpm/BUILDROOT/vim-7.4.1718-1.fc23.x86_64
Wrote: /home/gustavo/Src/rpm/SRPMS/vim-7.4.1718-1.fc23.src.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-common-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-minimal-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-enhanced-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-filesystem-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-X11-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-debuginfo-7.4.1718-1.fc23.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.tNsBuH
+ umask 022
+ cd /home/gustavo/Src/rpm/BUILD
+ cd vim74
+ rm -rf /home/gustavo/Src/rpm/BUILDROOT/vim-7.4.1718-1.fc23.x86_64
+ exit 0
安装新版本
所以现在你已经按照 fedora 的建议和补丁构建了软件包,你可以继续并重新安装它们(如果你已经有默认的 fedora vim 版本,这可能是真的)像这样:
cd /home/statquant/Src/rpm/RPMS/x86_64/
sudo dnf reinstall ./vim-common-7.4.1718-1.fc23.x86_64.rpm
sudo dnf reinstall ./vim-enhanced-7.4.1718-1.fc23.x86_64.rpm
etc...
请注意点和斜线表示 dnf 正在尝试安装本地包,而不是搜索其数据库,这将下载您已有的版本。
备注
出于安全考虑,我没有上传我的定制包,但如果你不介意或想尝试它们,请 ping 我,我可以上传它们,这样你就可以省去所有这些麻烦......我已经拥有所有 RPM 构建工具,因为我为自己构建了一些 here。
您可能还想创建一个 COPR 存储库以便自动执行此过程,如果您需要格式化磁盘、重新安装 fedora、在新机器上安装它等,您只需添加存储库并使用 dnf 安装您的自定义包。
如果您有任何其他问题,请告诉我,祝您好运!
更新 规范文件中有以 # options for
开头的注释,因此您可以跳转到实际的配置选项
现在有一个 Vim 问题与此有关:
https://github.com/vim/vim/issues/1081
我正在使用我在对该问题的评论中提到的解决方法:
https://github.com/vim/vim/issues/1081#issuecomment-269920486
我已经复制了下面的大部分评论,希望对您有所帮助。
我 运行 在 Fedora 25 (x86_64) 上解决了这个问题。 Vim 的配置脚本向 ruby 询问有关 LDFLAGS 的信息,但没有针对 CFLAGS 的相应查询:
https://github.com/vim/vim/blob/v8.0.0134/src/auto/configure#L7174
rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LDFLAGS']"`
自 Fedora 23 起,所有 RPM 默认为 "hardened":
https://fedoraproject.org/wiki/Changes/Harden_All_Packages
构建 RPM 时,RPM SPEC 文件中使用的 %configure 宏会自动调整以提供 CFLAGS、LDFLAGS 和其他几个使用强化设置的环境变量。当使用 Fedora 的 ruby 包时,上述查询使用 rbconfig returns 强化链接器标志。因为Vim的配置脚本没有使用相应的rbconfig查询ruby的CFLAGS,编译和链接标志不匹配,导致错误:
configure: error: NOT FOUND!
You need to install a terminal library; for example ncurses.
Or specify the name of the library with --with-tlib.
在 src/auto/config.log 中,这种标志不匹配导致了这个错误:
configure:11318: checking for tgetent in -lncurses
configure:11343: gcc -o conftest -g -O2 -L. -Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -fstack-protector -rdynamic -Wl,-export-dynamic -Wl,--enable-new-dtags -Wl,-z,relro -L/usr/local/lib conftest.c -lncurses -lselinux >&5
/usr/bin/ld: /tmp/cckpDslF.o: relocation R_X86_64_PC32 against undefined symbol `tgetent' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
我可以通过变通方法成功构建,但我对 autoconf 的了解还不够,无法建议对配置脚本进行适当的修复。解决方法包括首先安装一些与 RPM 相关的包:
sudo dnf install -y rpm-build redhat-rpm-config
接下来,在 shell 提示符下通过以下方式设置这些变量:
eval $(rpmbuild --eval '%{configure}' | egrep '^\s*[A-Z]+=')
上面使用 rpmbuild --eval '%{configure}' 查询以多个环境变量赋值开头的 %configure 宏的定义。这提供了与 %configure 宏中提供的相同的默认编译环境。现在 运行 下面的调用成功了:
./configure --quiet --with-features=huge --enable-rubyinterp
我正在尝试在我的 Fedora 23
上使用以下选项构建 vim我想要 +python +python3 +perl +lua +ruby +gui +conceal +gui
一些插件。
我找不到内置所有这些的版本(所以我自己做了)
旅程始于跟随Valloric
sudo yum install -y ruby ruby-devel lua lua-devel luajit \
luajit-devel ctags git python python-devel \
python3 python3-devel tcl-devel \
perl perl-devel perl-ExtUtils-ParseXS \
perl-ExtUtils-XSpp perl-ExtUtils-CBuilder \
perl-ExtUtils-Embed
我也有 ncurses
(原始、开发、静态、...)
然后
$ cd $HOME/Sources
$ git clone https://github.com/vim/vim.git
$ cd vim
$ ./configure --with-tlib=ncurses \
--with-features=huge \
--enable-fail-if-missing \
--enable-luainterp=yes \
--enable-mzschemeinterp \
--enable-perlinterp \
--enable-pythoninterp=yes \
--with-python-config-dir=/usr/lib64/python2.7/config \
--enable-python3interp=yes \
--enable-tclinterp=yes \
--enable-rubyinterp=yes \
--enable-cscope \
--enable-multibyte \
--enable-gui=auto \
--prefix=$HOME/Build/vim \
--with-compiledby=statquant | tee configure.log
屏幕上打印以下内容:
/home/statquant/Sources/vim/src/config-PyMake3137:1478: warning: overriding recipe for target 'Modules/_math.o'
/home/statquant/Sources/vim/src/config-PyMake3137:1475: warning: ignoring old recipe for target 'Modules/_math.o'
/home/statquant/Sources/vim/src/config-PyMake3137:1517: warning: overriding recipe for target 'Modules/timemodule.o'
/home/statquant/Sources/vim/src/config-PyMake3137:1482: warning: ignoring old recipe for target 'Modules/timemodule.o'
configure: error: NOT FOUND!
You need to install a terminal library; for example ncurses.
Or specify the name of the library with --with-tlib.
那我
make | tee make.log
我意识到它实际上在 $HOME/Sources/vim/src
而不是 $HOME/Build/vim
中构建了 vim(也许我的期望是错误的)
当我 运行 :version
在 ./vim -g
上(vim 已经构建了 GUI 支持)有
否 python 否 python3 ....
configure.log
是 there, make.log
is there
EDIT1:以下作品,我现在只怀念+perl +ruby
./configure --with-features=huge \
--enable-tclinterp=yes \
--enable-luainterp=yes \
--enable-pythoninterp=yes \
--enable-python3interp=yes \
--with-compiledby=statquant \
--prefix=$HOME/Build/vim \
make install # and yes it installs in $HOME/Build/vim
EDIT2 这是我尝试添加
时发生的情况- +perl
我可以运行
./configure --with-features=huge \
--enable-tclinterp=yes \
--enable-luainterp=yes \
--enable-pythoninterp=yes \
--enable-python3interp=yes \
--enable-perlinterp=yes \
--prefix=$HOME/Build/vim \
--with-compiledby=statquant | tee configure.log
似乎有效(没有错误):configure.log
make | tee make.log
[...]
cc1: error: -Wformat-security ignored without -Wformat [-Werror=format-security]
<command-line>:0:0: warning: "_FORTIFY_SOURCE" redefined
<command-line>:0:0: note: this is the location of the previous definition
cc1: some warnings being treated as errors
make[1]: *** [objects/option.o] Error 1
Makefile:2907: recipe for target 'objects/option.o' failed
make[1]: Leaving directory '/home/statquant/Sources/vim/src'
make: *** [first] Error 2
Makefile:26: recipe for target 'first' failed
我没有 vim
内置 /home/statquant/Sources/vim/src
: make.log
+ruby
./configure --with-features=huge \ --enable-tclinterp=yes \ --enable-luainterp=yes \ --enable-pythoninterp=yes \ --enable-python3interp=yes \ --enable-rubyinterp=yes \ --prefix=$HOME/Build/vim \ --with-compiledby=statquant |三通 configure.log
它甚至没有 运行 configure
checking --with-tlib argument... empty: automatic terminal library selection
checking for tgetent in -ltinfo... no
checking for tgetent in -lncurses... no
checking for tgetent in -ltermlib... no
checking for tgetent in -ltermcap... no
checking for tgetent in -lcurses... no
no terminal library found
checking for tgetent()... configure: error: NOT FOUND!
You need to install a terminal library; for example ncurses.
Or specify the name of the library with --with-tlib.
这是日志:configure.log
您已启用 -Werror=format-security
。这会将当前被视为“错误”的 printf
或 scanf
格式的任何易受影响的用法。
您可以修复 if_perl.c
中的用法,我相信这是生成的文件。或删除标志 -Werror=format-security
python 问题是...
--with-python-config-dir=/usr/lib64/python2.7/config \
--enable-python3interp=yes \
带有版本 3 解释器的版本 2 配置。
你缺少 ncurses-devel
库,我可以看到你从配置中删除了它。
sudo yum install ncurses-devel
configure
实际上对我有用,即使我没有安装 perl 开发包,即要求我安装它们并没有失败,我觉得这很奇怪。您是否安装了所有需要的开发包。
sudo yum install perl-devel
sudo yum install ruby-devel
如果您缺少 ruby 或 perl 的一些开发包,配置脚本会这样说:"disabling this option"。刚刚用 ruby 做了这个。安装 ruby-dev 软件包后,ruby 选项在 vim 中启用。与 libperl-dev 相同。
好的...事情就是这样。 VIM 是那些有大量补丁的程序之一,Fedora 在 GCC 级别强制执行一些安全检查,不允许您从源代码构建它 (容易)代码,我的建议:重建源 rpm,并不难:
安装重建所需的依赖项VIM
这些软件包是您在 F23
中构建 VIM 所必需的sudo dnf install gtk2-devel ncurses-devel lua-devel perl-devel perl-ExtUtils-Embed perl-ExtUtils-ParseXS perl-ExtUtils-XSpp perl-ExtUtils-CBuilder python-devel python3-devel tcl-devel ruby-devel
安装球拍存储库
我看到你传递了 --enable-mzschemeinterp
标志,它需要球拍,官方回购中没有。
cat >/etc/yum.repos.d/rpm-sphere.repo <<EOF
[rpm-sphere]
name=RPM Sphere
baseurl=http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_23/
gpgkey=http://download.opensuse.org/repositories/home:/zhonghuaren/Fedora_23/repodata/repomd.xml.key
enabled=1
gpgcheck=1
EOF
安装 RPM 开发者工具:
这些是将工具安装到 build/rebuild rpms
所必需的sudo dnf install @development-tools
sudo dnf install fedora-packager
sudo dnf install rpmdevtools
设置您的 RPM 构建根目录
在您的主文件夹中创建一个名为 rpmmacros
的文件,如下所示:
vim ~/.rpmmacros
添加以下内容:
%_topdir /home/statquant/Src/rpm
然后创建文件夹/home/statquant/Src/rpm
创建 RPM 构建必要的文件夹
您需要有这些文件夹,以便在安装源 rpm 时存储源代码和规范文件:
mkdir -p ~/Src/rpm
cd ~/Src/rpm
mkdir BUILD RPMS SOURCES SPECS SRPMS
mkdir RPMS/{noarch,x86,x86_64}
下载 VIM 源 RPM:
dnf dnl --source vim
这会将源 rpm 下载到当前文件夹,比如 vim-7.4.1718-1.fc23.src.rpm
下载完成后,安装它:
rpm -ivh vim-7.4.1718-1.fc23.src.rpm
安装后 RPM 应该会创建文件 /home/statquant/Src/rpm/SPECS/vim.spec
打开此文件。
修改配置选项
您会看到 SPEC 文件具有配置选项和构建实际内容的 make 命令。这个文件很大,而且有很多补丁。您可以继续修改configure命令所在的区域,有3个:
- 一个 vim 最小
- 一个 vim 增强
- 一个用于 vim 的 GUI 版本
确保进行相应的修改。我用你的选项做了一个测试构建。你可以下载我的 SPEC file here,和 vim,vim-enhanced 和 gvim 工作得很好。
重建 RPM
修改(或从我的模板复制)要基于该规范构建 RPM 的规范文件后,转到 /home/statquant/Src/rpm
,然后:
rpmbuild -ba SPECS/vim.spec
这需要一段时间,之后,您应该会看到一些输出表明包已成功构建,在我的例子中:
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/gustavo/Src/rpm/BUILDROOT/vim-7.4.1718-1.fc23.x86_64
Wrote: /home/gustavo/Src/rpm/SRPMS/vim-7.4.1718-1.fc23.src.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-common-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-minimal-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-enhanced-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-filesystem-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-X11-7.4.1718-1.fc23.x86_64.rpm
Wrote: /home/gustavo/Src/rpm/RPMS/x86_64/vim-debuginfo-7.4.1718-1.fc23.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.tNsBuH
+ umask 022
+ cd /home/gustavo/Src/rpm/BUILD
+ cd vim74
+ rm -rf /home/gustavo/Src/rpm/BUILDROOT/vim-7.4.1718-1.fc23.x86_64
+ exit 0
安装新版本
所以现在你已经按照 fedora 的建议和补丁构建了软件包,你可以继续并重新安装它们(如果你已经有默认的 fedora vim 版本,这可能是真的)像这样:
cd /home/statquant/Src/rpm/RPMS/x86_64/
sudo dnf reinstall ./vim-common-7.4.1718-1.fc23.x86_64.rpm
sudo dnf reinstall ./vim-enhanced-7.4.1718-1.fc23.x86_64.rpm
etc...
请注意点和斜线表示 dnf 正在尝试安装本地包,而不是搜索其数据库,这将下载您已有的版本。
备注
出于安全考虑,我没有上传我的定制包,但如果你不介意或想尝试它们,请 ping 我,我可以上传它们,这样你就可以省去所有这些麻烦......我已经拥有所有 RPM 构建工具,因为我为自己构建了一些 here。
您可能还想创建一个 COPR 存储库以便自动执行此过程,如果您需要格式化磁盘、重新安装 fedora、在新机器上安装它等,您只需添加存储库并使用 dnf 安装您的自定义包。
如果您有任何其他问题,请告诉我,祝您好运!
更新 规范文件中有以 # options for
开头的注释,因此您可以跳转到实际的配置选项
现在有一个 Vim 问题与此有关: https://github.com/vim/vim/issues/1081
我正在使用我在对该问题的评论中提到的解决方法: https://github.com/vim/vim/issues/1081#issuecomment-269920486
我已经复制了下面的大部分评论,希望对您有所帮助。
我 运行 在 Fedora 25 (x86_64) 上解决了这个问题。 Vim 的配置脚本向 ruby 询问有关 LDFLAGS 的信息,但没有针对 CFLAGS 的相应查询: https://github.com/vim/vim/blob/v8.0.0134/src/auto/configure#L7174
rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LDFLAGS']"`
自 Fedora 23 起,所有 RPM 默认为 "hardened": https://fedoraproject.org/wiki/Changes/Harden_All_Packages
构建 RPM 时,RPM SPEC 文件中使用的 %configure 宏会自动调整以提供 CFLAGS、LDFLAGS 和其他几个使用强化设置的环境变量。当使用 Fedora 的 ruby 包时,上述查询使用 rbconfig returns 强化链接器标志。因为Vim的配置脚本没有使用相应的rbconfig查询ruby的CFLAGS,编译和链接标志不匹配,导致错误:
configure: error: NOT FOUND!
You need to install a terminal library; for example ncurses.
Or specify the name of the library with --with-tlib.
在 src/auto/config.log 中,这种标志不匹配导致了这个错误:
configure:11318: checking for tgetent in -lncurses
configure:11343: gcc -o conftest -g -O2 -L. -Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -fstack-protector -rdynamic -Wl,-export-dynamic -Wl,--enable-new-dtags -Wl,-z,relro -L/usr/local/lib conftest.c -lncurses -lselinux >&5
/usr/bin/ld: /tmp/cckpDslF.o: relocation R_X86_64_PC32 against undefined symbol `tgetent' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
我可以通过变通方法成功构建,但我对 autoconf 的了解还不够,无法建议对配置脚本进行适当的修复。解决方法包括首先安装一些与 RPM 相关的包:
sudo dnf install -y rpm-build redhat-rpm-config
接下来,在 shell 提示符下通过以下方式设置这些变量:
eval $(rpmbuild --eval '%{configure}' | egrep '^\s*[A-Z]+=')
上面使用 rpmbuild --eval '%{configure}' 查询以多个环境变量赋值开头的 %configure 宏的定义。这提供了与 %configure 宏中提供的相同的默认编译环境。现在 运行 下面的调用成功了:
./configure --quiet --with-features=huge --enable-rubyinterp