[cfe-dev] Linking ProfileRT when using -nodefaultlibs

Eric Fiselier eric at efcs.ca
Mon Nov 10 11:26:26 PST 2014


Thanks for the heads up about the dead link. I've attached the output to
this email.

I spent some time last night trying to fix this problem in Clang but I had
no luck :(
Moving the compiler-rt library before the linker inputs only created more
issues.

/Eric

On Mon, Nov 10, 2014 at 11:40 AM, Justin Bogner <mail at justinbogner.com>
wrote:

> Eric Fiselier <eric at efcs.ca> writes:
> > Hello,
> >
> > I'm working on making libc++ generate code coverage data. This means that
> > libclang_rt.profile.x86_64.a is put into the link command before '-lc'
> and
> > other dependencies.
> > I suspect this change in library order causes the linker errors I see
> while
> > running the tests.
> >
> > I have a couple of questions:
> >  - Should -ftest-coverage be passed when linking libc++?
> >  - Is there a way to link libclang_rt.profile.x86_64.a after the given
> linker
> >    flags
> >
> > This file shows the ld invocation with and without -nodefaultlibs as
> well as
> > the error produced when
> > linking tests w/ -nodefaultlibs
> > http://pastebin.com/QWagJpsW
>
> There's nothing there? Mailing this text directly seems simpler than a
> pastebin to me.
>
> This issue and a few other things I've seen recently make me think that
> compiler-rt and -nodefaultlibs don't interact very well in general. I
> guess there's work to be done in the area.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20141110/4ccca206/attachment.html>
-------------- next part --------------
=================== Link command w/ -nodefaultlibs =============================
/opt/llvm-tot/bin/clang++  -fPIC  -nostdinc++ -std=c++11 -Werror=return-type 
-Wall -W -Wno-unused-parameter -Wwrite-strings -Wno-long-long -Wno-error -pedantic 
-D_DEBUG -g -O0 --coverage -fprofile-arcs -ftest-coverage -nodefaultlibs
-shared -Wl,-soname,libc++.so.1 -o libc++.so.1.0 
CMakeFiles/cxx.dir/__/src/algorithm.cpp.o 
CMakeFiles/cxx.dir/__/src/stdexcept.cpp.o CMakeFiles/cxx.dir/__/src/strstream.cpp.o 
CMakeFiles/cxx.dir/__/src/iostream.cpp.o CMakeFiles/cxx.dir/__/src/mutex.cpp.o 
CMakeFiles/cxx.dir/__/src/string.cpp.o CMakeFiles/cxx.dir/__/src/new.cpp.o 
CMakeFiles/cxx.dir/__/src/bind.cpp.o CMakeFiles/cxx.dir/__/src/future.cpp.o 
CMakeFiles/cxx.dir/__/src/thread.cpp.o CMakeFiles/cxx.dir/__/src/random.cpp.o 
CMakeFiles/cxx.dir/__/src/debug.cpp.o CMakeFiles/cxx.dir/__/src/ios.cpp.o
CMakeFiles/cxx.dir/__/src/hash.cpp.o CMakeFiles/cxx.dir/__/src/system_error.cpp.o
CMakeFiles/cxx.dir/__/src/valarray.cpp.o CMakeFiles/cxx.dir/__/src/memory.cpp.o 
CMakeFiles/cxx.dir/__/src/utility.cpp.o CMakeFiles/cxx.dir/__/src/condition_variable.cpp.o
CMakeFiles/cxx.dir/__/src/optional.cpp.o CMakeFiles/cxx.dir/__/src/typeinfo.cpp.o
CMakeFiles/cxx.dir/__/src/locale.cpp.o CMakeFiles/cxx.dir/__/src/shared_mutex.cpp.o 
CMakeFiles/cxx.dir/__/src/exception.cpp.o CMakeFiles/cxx.dir/__/src/regex.cpp.o 
CMakeFiles/cxx.dir/__/src/chrono.cpp.o -lc++abi -v -lpthread -lc -lm -lrt -lgcc_s
clang version 3.6.0 
Target: x86_64-unknown-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7.3
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.2
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.1
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
clang-3.6: warning: argument unused during compilation: '-nostdinc++'
clang-3.6: warning: argument unused during compilation: '--coverage'
 "/usr/bin/ld" -z relro --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 
-shared -o libc++.so.1.0 
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crti.o 
/usr/lib/gcc/x86_64-linux-gnu/4.9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/4.9 
-L/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu 
-L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu 
-L/usr/lib/gcc/x86_64-linux-gnu/4.9/../../.. -L/opt/llvm-tot/bin/../lib 
-L/lib -L/usr/lib -soname libc++.so.1 CMakeFiles/cxx.dir/__/src/algorithm.cpp.o 
CMakeFiles/cxx.dir/__/src/stdexcept.cpp.o CMakeFiles/cxx.dir/__/src/strstream.cpp.o 
CMakeFiles/cxx.dir/__/src/iostream.cpp.o CMakeFiles/cxx.dir/__/src/mutex.cpp.o
CMakeFiles/cxx.dir/__/src/string.cpp.o CMakeFiles/cxx.dir/__/src/new.cpp.o
CMakeFiles/cxx.dir/__/src/bind.cpp.o CMakeFiles/cxx.dir/__/src/future.cpp.o
CMakeFiles/cxx.dir/__/src/thread.cpp.o CMakeFiles/cxx.dir/__/src/random.cpp.o
CMakeFiles/cxx.dir/__/src/debug.cpp.o CMakeFiles/cxx.dir/__/src/ios.cpp.o
CMakeFiles/cxx.dir/__/src/hash.cpp.o CMakeFiles/cxx.dir/__/src/system_error.cpp.o
CMakeFiles/cxx.dir/__/src/valarray.cpp.o CMakeFiles/cxx.dir/__/src/memory.cpp.o
CMakeFiles/cxx.dir/__/src/utility.cpp.o CMakeFiles/cxx.dir/__/src/condition_variable.cpp.o
CMakeFiles/cxx.dir/__/src/optional.cpp.o CMakeFiles/cxx.dir/__/src/typeinfo.cpp.o 
CMakeFiles/cxx.dir/__/src/locale.cpp.o CMakeFiles/cxx.dir/__/src/shared_mutex.cpp.o 
CMakeFiles/cxx.dir/__/src/exception.cpp.o CMakeFiles/cxx.dir/__/src/regex.cpp.o
CMakeFiles/cxx.dir/__/src/chrono.cpp.o -lc++abi -lpthread -lc -lm -lrt -lgcc_s 
/opt/llvm-tot/bin/../lib/clang/3.6.0/lib/linux/libclang_rt.profile-x86_64.a 
/usr/lib/gcc/x86_64-linux-gnu/4.9/crtendS.o 
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crtn.o


=========================== Example of a Failing Test ==========================
Command: '/opt/llvm-tot/bin/clang++' '-std=c++11' '-nostdinc++' 
  '-I/home/eric/workspace/libcxx/test/../include'
  '-I/home/eric/workspace/libcxx/test/../test/support' 
  '-D__STDC_FORMAT_MACROS' '-D__STDC_LIMIT_MACROS' '-D__STDC_CONSTANT_MACROS'
  '-o' '/tmp/tmp_HdwU_exe'
  '/home/eric/workspace/libcxx/test/algorithms/alg.modifying.operations/alg.copy/copy_n.pass.cpp'
  '-nodefaultlibs' '-lc++' '-L/home/eric/workspace/build-libcxx/lib' '-Wl,-rpath'
  '-Wl,/home/eric/workspace/build-libcxx/lib' '-lc++abi' '-lgcc_eh' '-lc' '-lm'
  '-lpthread' '-lrt' '-lgcc_s' '-g' '-O0' '--coverage' '-fprofile-arcs'
  '-ftest-coverage'
Exit Code: 1
Standard Error:
--
clang-3.6: warning: argument unused during compilation: '--coverage'
/usr/bin/ld: /tmp/tmp_HdwU_exe: hidden symbol `atexit' in 
  /usr/lib/x86_64-linux-gnu/libc_nonshared.a(atexit.oS) is referenced by DSO
/usr/bin/ld: final link failed: Bad value
clang-3.6: error: linker command failed with exit code 1 (use -v to see invocation)


======================== Link command w/o -nodefaultlibs =======================
/opt/llvm-tot/bin/clang++  -fPIC  -nostdinc++ -std=c++11 -Werror=return-type 
-Wall -W -Wno-unused-parameter -Wwrite-strings -Wno-long-long -Wno-error 
-pedantic -D_DEBUG -g -O0 --coverage -fprofile-arcs -ftest-coverage -shared 
-Wl,-soname,libc++.so.1 -o libc++.so.1.0 CMakeFiles/cxx.dir/__/src/algorithm.cpp.o
 CMakeFiles/cxx.dir/__/src/stdexcept.cpp.o CMakeFiles/cxx.dir/__/src/strstream.cpp.o
CMakeFiles/cxx.dir/__/src/iostream.cpp.o CMakeFiles/cxx.dir/__/src/mutex.cpp.o
CMakeFiles/cxx.dir/__/src/string.cpp.o CMakeFiles/cxx.dir/__/src/new.cpp.o
CMakeFiles/cxx.dir/__/src/bind.cpp.o CMakeFiles/cxx.dir/__/src/future.cpp.o
CMakeFiles/cxx.dir/__/src/thread.cpp.o CMakeFiles/cxx.dir/__/src/random.cpp.o
CMakeFiles/cxx.dir/__/src/debug.cpp.o CMakeFiles/cxx.dir/__/src/ios.cpp.o
CMakeFiles/cxx.dir/__/src/hash.cpp.o CMakeFiles/cxx.dir/__/src/system_error.cpp.o
CMakeFiles/cxx.dir/__/src/valarray.cpp.o CMakeFiles/cxx.dir/__/src/memory.cpp.o
CMakeFiles/cxx.dir/__/src/utility.cpp.o CMakeFiles/cxx.dir/__/src/condition_variable.cpp.o
CMakeFiles/cxx.dir/__/src/optional.cpp.o CMakeFiles/cxx.dir/__/src/typeinfo.cpp.o
CMakeFiles/cxx.dir/__/src/locale.cpp.o CMakeFiles/cxx.dir/__/src/shared_mutex.cpp.o
CMakeFiles/cxx.dir/__/src/exception.cpp.o CMakeFiles/cxx.dir/__/src/regex.cpp.o
CMakeFiles/cxx.dir/__/src/chrono.cpp.o -lc++abi -v -lpthread -lc -lm -lrt -lgcc_s 
clang version 3.6.0 
Target: x86_64-unknown-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7.3
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.2
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.1
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
clang-3.6: warning: argument unused during compilation: '-nostdinc++'
clang-3.6: warning: argument unused during compilation: '--coverage'
 "/usr/bin/ld" -z relro --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64
-shared -o libc++.so.1.0 
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crti.o
/usr/lib/gcc/x86_64-linux-gnu/4.9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/4.9
-L/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu
-L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu
-L/usr/lib/gcc/x86_64-linux-gnu/4.9/../../.. -L/opt/llvm-tot/bin/../lib -L/lib
-L/usr/lib -soname libc++.so.1 CMakeFiles/cxx.dir/__/src/algorithm.cpp.o
CMakeFiles/cxx.dir/__/src/stdexcept.cpp.o CMakeFiles/cxx.dir/__/src/strstream.cpp.o
CMakeFiles/cxx.dir/__/src/iostream.cpp.o CMakeFiles/cxx.dir/__/src/mutex.cpp.o
CMakeFiles/cxx.dir/__/src/string.cpp.o CMakeFiles/cxx.dir/__/src/new.cpp.o
CMakeFiles/cxx.dir/__/src/bind.cpp.o CMakeFiles/cxx.dir/__/src/future.cpp.o
CMakeFiles/cxx.dir/__/src/thread.cpp.o CMakeFiles/cxx.dir/__/src/random.cpp.o
CMakeFiles/cxx.dir/__/src/debug.cpp.o CMakeFiles/cxx.dir/__/src/ios.cpp.o
CMakeFiles/cxx.dir/__/src/hash.cpp.o CMakeFiles/cxx.dir/__/src/system_error.cpp.o
CMakeFiles/cxx.dir/__/src/valarray.cpp.o CMakeFiles/cxx.dir/__/src/memory.cpp.o 
CMakeFiles/cxx.dir/__/src/utility.cpp.o CMakeFiles/cxx.dir/__/src/condition_variable.cpp.o
CMakeFiles/cxx.dir/__/src/optional.cpp.o CMakeFiles/cxx.dir/__/src/typeinfo.cpp.o
CMakeFiles/cxx.dir/__/src/locale.cpp.o CMakeFiles/cxx.dir/__/src/shared_mutex.cpp.o
CMakeFiles/cxx.dir/__/src/exception.cpp.o CMakeFiles/cxx.dir/__/src/regex.cpp.o
CMakeFiles/cxx.dir/__/src/chrono.cpp.o -lc++abi -lpthread -lc -lm -lrt -lgcc_s
/opt/llvm-tot/bin/../lib/clang/3.6.0/lib/linux/libclang_rt.profile-x86_64.a
-lstdc++ -lm -lgcc_s -lc -lgcc_s /usr/lib/gcc/x86_64-linux-gnu/4.9/crtendS.o 
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crtn.o




More information about the cfe-dev mailing list