binutils和gcc与LTO

art*_*lev 6 c++ gcc binutils lto

我将binutils-2.25.1安装到/usr/local/binutils-2.25.1,配置了

../configure --prefix=/usr/local/binutils-2.25.1 --enable-plugins --enable-gold --disable-werror
Run Code Online (Sandbox Code Playgroud)

我想构建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
Run Code Online (Sandbox Code Playgroud)

安装此软件包后,我尝试:

/usr/local/gcc-4.9.3/bin/g++ -flto -fno-fat-lto-objects -fuse-linker-plugin test.cpp -o test
Run Code Online (Sandbox Code Playgroud)

得到:

cc1plus: error: -fno-fat-lto-objects are supported only with linker plugin
Run Code Online (Sandbox Code Playgroud)

但是,来自/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
Run Code Online (Sandbox Code Playgroud)

此外,来自/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
Run Code Online (Sandbox Code Playgroud)

伙计们需要你的帮助

UPD我设法解决了这个问题.刚刚更换

./configure ...
Run Code Online (Sandbox Code Playgroud)

mkdir build && cd build && ../configure ...
Run Code Online (Sandbox Code Playgroud)

并补充说

cd build
Run Code Online (Sandbox Code Playgroud)

%安装开始

gcc-4.9.3/lto-plugin/congifure脚本编写不正确!