Can I get a report of ALL the libraries linked when building my C++ executable (gcc)? (including statically linked)

后端 未结 5 1011
灰色年华
灰色年华 2021-01-30 17:29

I have a C++ application that I inherited, which consists of:

  • My main app
  • Several app-specific libraries (libapp1, libapp2, etc...)
  • Several \"thi
5条回答
  •  逝去的感伤
    2021-01-30 18:06

    I had similar problem and found solution: add -Wl,--verbose option when linking. It will switch linker to verbose mode:

    gcc -o test main.o -ltest -L. -Wl,--verbose
    

    Here is example output:

    GNU ld (GNU Binutils) 2.23.52.20130604
      Supported emulations:
       i386pep
       i386pe
    using internal linker script:
    ==================================================
    /* Default linker script, for normal executables */
    [many lines here]
    ==================================================
    attempt to open /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../../lib/crt0.o succeeded
    /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../../lib/crt0.o
    attempt to open /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/crtbegin.o succeeded
    /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/crtbegin.o
    attempt to open main.o succeeded
    main.o
    attempt to open ./libtest.dll.a failed
    attempt to open ./test.dll.a failed
    attempt to open ./libtest.a succeeded
    (./libtest.a)test.o
    [more lines here]
    attempt to open /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/crtend.o succeeded
    /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/crtend.o
    

    Update: You can also use -Wl,--trace option instead of -Wl,--verbose. It will also give you list of libraries, but is less verbose.

    Update 2: -Wl,--trace does not display libraries included indirectly. Example: you link with libA, and libA was linked with libB. If you want to see that libB is needed too, you must use -Wl,--verbose.

提交回复
热议问题