我已将 binutils-2.25.1 安装到 /usr/local/binutils-2.25.1,配置为
../configure --prefix=/usr/local/binutils-2.25.1 --enable-plugins --enable-gold --disable-werror
我想构建 RPM 包 -支持 LTO 的 gcc,它使用来自 /usr/local/binutils-2.25.1 的链接器ld 。
我尝试:
Summary: The GNU Compiler Collection
Name: gcc-custom
Version: 4.9.3
%define full_name gcc-%{version}
%define binutils_path /usr/local/binutils-2.25.1
Release: 0
...
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
%description
%prep
%setup -q -a0 -n %{full_name}
%build
AR=%{binutils_path}/bin/ar NM=%{binutils_path}/bin/nm RANLIB=@%{binutils_path}/bin/ranlib ./configure \
--prefix=/usr/local/%{full_name} \
--disable-multilib \
--enable-languages=c,c++ \
--enable-lto \
--enable-linker-build-id \
--enable-plugin \
--with-ld=%{binutils_path}/bin/ld \
--with-plugin-ld=%{binutils_path}/bin/ld \
--with-as=%{binutils_path}/bin/as
make
%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
/usr/local/%{full_name}
%changelog
安装此软件包后,我尝试:
/usr/local/gcc-4.9.3/bin/g++ -flto -fno-fat-lto-objects -fuse-linker-plugin test.cpp -o test
并得到:
cc1plus: error: -fno-fat-lto-objects are supported only with linker plugin
但是, /usr/local/binutils-2.25.1 中的ld具有插件支持
/usr/local/binutils-2.25.1/bin/ld --help | grep plugin
-plugin PLUGIN Load named plugin
-plugin-opt ARG Send arg to last-loaded plugin
此外,来自 /usr/local/gcc-4.9.3 的 gcc-{ar,nm,ranlib} 具有 --plugin 支持
/usr/local/gcc-4.9.3/bin/gcc-ar --help | grep plugin
--plugin <p> - load the specified plugin
需要你的帮助,伙计们
UPD 我设法解决了这个问题。刚换
./configure ...
和
mkdir build && cd build && ../configure ...
并且还添加了
cd build
% install开始
gcc-4.9.3/lto-plugin/configure脚本写不正确!!!