c++ - -fsanitize no usa el enlazador de oro en GCC-6.1
ld address-sanitizer (1)
Para mí el mismo problema y la misma solución usando
-fuse-ld=gold
Actualización (30-Sept-2016)
La versión de Ubuntu de gcc-6.2 ((Ubuntu 6.2.0-3ubuntu11 ~ 16.04) 6.2.0 20160901) ya no tiene este problema.
Estoy usando la versión de Ubuntu de gcc-6.1 [1] ((Ubuntu 6.1.1-3ubuntu11 ~ 14.04.1) 6.1.1 20160511), GNU binutils 2.24 y libstdc ++ con soporte GLIBCXX_3.4.22. Incluso en un programa simple "hola mundo", especificar un desinfectante no está forzando el uso del enlazador dorado.
main.cpp
#include <iostream>
int main() {
std::cout << "Hello, world!/n";
}
Compilando y enlazando
g++ -fsanitize=address -c -o main main.cpp
g++ -fsanitize=address -o main main.o
da el error
/usr/bin/ld: unrecognized option ''--push-state''
/usr/bin/ld: use the --help option for usage information
collect2: error: ld returned 1 exit status
Lo que indica que la opción -fsanitize
no está seleccionando el enlazador dorado. Por supuesto, la solución simple es usar -fuse-ld=gold
durante la vinculación, pero las versiones anteriores de gcc no lo necesitaban al usar los desinfectantes. Por ejemplo, este código funciona perfectamente bien en gcc-5.3 y 4.9 (ambos son versiones de Ubuntu). ¿Alguien más tiene este problema con compilaciones de gcc-6.1 que no son de Ubuntu? ¿Las construcciones de Ubuntu están rotas?
[1] Construido con las siguientes banderas (gcc-5.3 y gcc-4.9 fueron construidos con solo diferencias en los nombres y sufijos)
--with-pkgversion=''Ubuntu 6.1.1-3ubuntu11~14.04.1''
--with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs
--enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++
--prefix=/usr
--program-suffix=-6
--enable-shared
--enable-linker-build-id
--libexecdir=/usr/lib
--without-included-gettext
--enable-threads=posix
--libdir=/usr/lib
--enable-nls
--with-sysroot=/
--enable-clocale=gnu
--enable-libstdcxx-debug
--enable-libstdcxx-time=yes
--with-default-libstdcxx-abi=gcc4-compatible
--disable-libstdcxx-dual-abi
--enable-gnu-unique-object
--disable-vtable-verify
--enable-libmpx
--enable-plugin
--with-system-zlib
--disable-browser-plugin
--enable-java-awt=gtk
--enable-gtk-cairo
--with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-amd64/jre
--enable-java-home
--with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-amd64
--with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-amd64
--with-arch-directory=amd64
--with-ecj-jar=/usr/share/java/eclipse-ecj.jar
--enable-objc-gc
--enable-multiarch
--disable-werror
--with-arch-32=i686
--with-abi=m64
--with-multilib-list=m32,m64,mx32
--enable-multilib
--with-tune=generic
--enable-checking=release
--build=x86_64-linux-gnu
--host=x86_64-linux-gnu
--target=x86_64-linux-gnu