How do I tell gcc (or ld) to link against debug versions of the standard c and c++ libraries

前端 未结 3 1309
陌清茗
陌清茗 2021-01-06 02:12

I have debug versions of libstdc++ and libc, among others, and would like to link against them. They live in /usr/lib/debug as opposed to /usr/lib. Any ideas?

3条回答
  •  孤城傲影
    2021-01-06 03:12

    I believe the accepted answer is misleading in that the libraries in /usr/lib/debug is not a debug compiled (-g -O0 ...) version of libraries in /lib,/usr/lib but simply debug symbols stripped from the corresponding library in /lib,/usr/lib. See the explanation the accepted answers to How to use debug version of libc and for How to link against debug versions of libc and libstdc++ in GCC? more details.

    Quotes:

    The libraries in /usr/lib/debug are not real libraries. Rather, the contain only debug info, but do not contain .text nor .data sections of the real libc.so.6

    and

    On many Linux installations the debug libraries do not contain real code; they only contain the debug info. The two are separated so that you can choose not to install them if you don't need them and you are short of disk space, but the debug libraries are no good on their own.

    Check yourself with:

    objdump -h /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.19.so | grep -C1 text
     11 .text         001488a3  000000000001f520  000000000001f520  000002b4  2**4
                      ALLOC, READONLY, CODE
    

    The .text segment is ALLOC but without CONTENTS. Compare with the corresponding library in /lib/x86_64-linux-gnu/libc-2.19.so:

    $ objdump -h /lib/x86_64-linux-gnu/libc-2.19.so | grep -C1 text
     11 .text         001488a3  000000000001f520  000000000001f520  0001f520  2**4
                      CONTENTS, ALLOC, LOAD, READONLY, CODE
    

提交回复
热议问题