[cfe-dev] Static linking a program

Rui Ueyama via cfe-dev cfe-dev at lists.llvm.org
Thu Jun 28 01:24:54 PDT 2018


Thanks for sharing the file with me. Does lld work if you remove -static
from the command line?

On Thu, Jun 28, 2018 at 1:04 AM Wink Saville <wink at saville.com> wrote:

> On Wed, Jun 27, 2018 at 8:02 AM, mats petersson <mats at planetcatfish.com>
> wrote:
> > Just to make sure this is NOT the issue: You are compiling and running
> > "main" on the same machine [physical, virtual or docker], and the
> compiler &
> > libraries you use are built for/on the machine you are running "main" on?
>
> Everything is being done on my physical Arch Linux box updated yesterday.
>
> > Not copying [or sharing over network filesystem] so that "main" is being
> run
> > on a different version of Linux? I've seen similar issues from trying to
> use
> > "wrong" versions of library on different versions/variants of Linux
> > (presumably because system calls, ABI or something else changed between
> > Release X of Linux A and Release Y of Linux B).
> >
> > --
> > Mats
> >
> > On 27 June 2018 at 07:44, Rui Ueyama via cfe-dev <cfe-dev at lists.llvm.org
> >
> > wrote:
> >>
> >> It works for me, but there might be some bug in lld that occurs in your
> >> environment but not in mine. Could you run the same command line with
> >> -Wl,--reproduce=repro.tar and share a resulting repro.tar with me?
> repro.tar
> >> contanis all input files fed to the linker, so I can run the same
> command
> >> with the same input as yours on my machine.
> >>
> >> On Wed, Jun 27, 2018 at 2:59 PM Wink Saville via cfe-dev
> >> <cfe-dev at lists.llvm.org> wrote:
> >>>
> >>> Thanks everyone, using "clang++ -v -static main.cpp" as a model worked,
> >>> see: https://github.com/winksaville/explore-cpp-static-linking
> >>>
> >>> But a curious thing, if I ask to use lld linker it compiles and links
> >>> fine, but it
> >>> fails with Segmentation fault. What have I done wrong now?
> >>>
> >>> $ clang++ -v -fuse-ld=lld -static main.cpp -o main
> >>> clang version 6.0.0 (tags/RELEASE_600/final)
> >>> Target: x86_64-pc-linux-gnu
> >>> Thread model: posix
> >>> InstalledDir: /usr/bin
> >>> Found candidate GCC installation:
> >>> /usr/bin/../lib/gcc/x86_64-pc-linux-gnu/8.1.1
> >>> Found candidate GCC installation:
> >>> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1
> >>> Found candidate GCC installation:
> /usr/lib/gcc/x86_64-pc-linux-gnu/8.1.1
> >>> Found candidate GCC installation:
> >>> /usr/lib64/gcc/x86_64-pc-linux-gnu/8.1.1
> >>> Selected GCC installation:
> >>> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1
> >>> Candidate multilib: .;@m64
> >>> Candidate multilib: 32;@m32
> >>> Selected multilib: .;@m64
> >>>  "/usr/bin/clang-6.0" -cc1 -triple x86_64-pc-linux-gnu -emit-obj
> >>> -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names
> >>> -main-file-name main.cpp -static-define -mrelocation-model pic
> >>> -pic-level 2 -pic-is-pie -mthread-model posix -mdisable-fp-elim
> >>> -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables
> >>> -fuse-init-array -target-cpu x86-64 -dwarf-column-info
> >>> -debugger-tuning=gdb -v -resource-dir /usr/lib/clang/6.0.0
> >>> -internal-isystem
> >>>
> >>>
> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/../../../../include/c++/8.1.1
> >>> -internal-isystem
> >>>
> >>>
> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/../../../../include/c++/8.1.1/x86_64-pc-linux-gnu
> >>> -internal-isystem
> >>>
> >>>
> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/../../../../include/c++/8.1.1/backward
> >>> -internal-isystem /usr/local/include -internal-isystem
> >>> /usr/lib/clang/6.0.0/include -internal-externc-isystem /include
> >>> -internal-externc-isystem /usr/include -fdeprecated-macro
> >>> -fdebug-compilation-dir /home/wink/prgs/explore-cpp-static-linking
> >>> -ferror-limit 19 -fmessage-length 121 -stack-protector 2
> >>> -fobjc-runtime=gcc -fcxx-exceptions -fexceptions
> >>> -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/main-e6f2d0.o -x
> >>> c++ main.cpp
> >>> clang -cc1 version 6.0.0 based upon LLVM 6.0.0 default target
> >>> x86_64-pc-linux-gnu
> >>> ignoring nonexistent directory "/include"
> >>> #include "..." search starts here:
> >>> #include <...> search starts here:
> >>>
> >>>
> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/../../../../include/c++/8.1.1
> >>>
> >>>
> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/../../../../include/c++/8.1.1/x86_64-pc-linux-gnu
> >>>
> >>>
> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/../../../../include/c++/8.1.1/backward
> >>>  /usr/local/include
> >>>  /usr/lib/clang/6.0.0/include
> >>>  /usr/include
> >>> End of search list.
> >>>  "/usr/bin/ld.lld" -m elf_x86_64 -static -o main
> >>>
> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/../../../../lib64/crt1.o
> >>>
> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/../../../../lib64/crti.o
> >>> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/crtbeginT.o
> >>> -L/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1
> >>> -L/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/../../../../lib64
> >>> -L/usr/bin/../lib64 -L/lib/../lib64 -L/usr/lib/../lib64
> >>> -L/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/../../..
> >>> -L/usr/bin/../lib -L/lib -L/usr/lib /tmp/main-e6f2d0.o -lstdc++ -lm
> >>> --start-group -lgcc -lgcc_eh -lc --end-group
> >>> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/crtend.o
> >>>
> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.1.1/../../../../lib64/crtn.o
> >>>
> >>> $ ./main 1 2 3
> >>> Segmentation fault (core dumped)
> >>>
> >>> $ coredumpctl gdb
> >>>            PID: 5870 (main)
> >>>            UID: 1000 (wink)
> >>>            GID: 100 (users)
> >>>         Signal: 11 (SEGV)
> >>>      Timestamp: Tue 2018-06-26 22:40:56 PDT (6s ago)
> >>>   Command Line: ./main 1 2 3
> >>>     Executable: /home/wink/prgs/explore-cpp-static-linking/main
> >>>  Control Group: /user.slice/user-1000.slice/session-c2.scope
> >>>           Unit: session-c2.scope
> >>>          Slice: user-1000.slice
> >>>        Session: c2
> >>>      Owner UID: 1000 (wink)
> >>>        Boot ID: 65910f0244bf4b62905c0198842b62d4
> >>>     Machine ID: 8f80fd742eae4659baed812cd07a9439
> >>>       Hostname: wink-desktop
> >>>        Storage:
> >>>
> >>>
> /var/lib/systemd/coredump/core.main.1000.65910f0244bf4b62905c0198842b62d4.5870.1530078056000000.lz4
> >>>        Message: Process 5870 (main) of user 1000 dumped core.
> >>>
> >>>                 Stack trace of thread 5870:
> >>>                 #0  0x0000000000383dc6 n/a
> >>> (/home/wink/prgs/explore-cpp-static-linking/main)
> >>>
> >>> GNU gdb (GDB) 8.1
> >>> Copyright (C) 2018 Free Software Foundation, Inc.
> >>> License GPLv3+: GNU GPL version 3 or later
> >>> <http://gnu.org/licenses/gpl.html>
> >>> This is free software: you are free to change and redistribute it.
> >>> There is NO WARRANTY, to the extent permitted by law.  Type "show
> >>> copying"
> >>> and "show warranty" for details.
> >>> This GDB was configured as "x86_64-pc-linux-gnu".
> >>> Type "show configuration" for configuration details.
> >>> For bug reporting instructions, please see:
> >>> <http://www.gnu.org/software/gdb/bugs/>.
> >>> Find the GDB manual and other documentation resources online at:
> >>> <http://www.gnu.org/software/gdb/documentation/>.
> >>> For help, type "help".
> >>> Type "apropos word" to search for commands related to "word"...
> >>> Reading symbols from
> >>> /home/wink/prgs/explore-cpp-static-linking/main...(no debugging
> >>> symbols found)...done.
> >>> [New LWP 5870]
> >>> Core was generated by `./main 1 2 3'.
> >>> Program terminated with signal SIGSEGV, Segmentation fault.
> >>> #0  0x0000000000383dc6 in _dl_get_origin ()
> >>> (gdb) bt
> >>> #0  0x0000000000383dc6 in _dl_get_origin ()
> >>> #1  0x000000000038342f in _dl_non_dynamic_init ()
> >>> #2  0x00000000002eecd1 in __libc_init_first ()
> >>> #3  0x00000000002ee9c7 in __libc_start_main ()
> >>> #4  0x000000000025302a in _start ()
> >>>
> >>> On Tue, Jun 26, 2018 at 2:58 PM, Joerg Sonnenberger via cfe-dev
> >>> <cfe-dev at lists.llvm.org> wrote:
> >>> > On Tue, Jun 26, 2018 at 09:36:18PM +0000, Shoaib Meenai via cfe-dev
> >>> > wrote:
> >>> >> I do see that you're linking all the start files yourself, but the
> >>> >> ordering can also make a difference.
> >>> >
> >>> > crt0.o / crt1.o was missing.
> >>> >
> >>> > Joerg
> >>> > _______________________________________________
> >>> > cfe-dev mailing list
> >>> > cfe-dev at lists.llvm.org
> >>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
> >>> _______________________________________________
> >>> cfe-dev mailing list
> >>> cfe-dev at lists.llvm.org
> >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
> >>
> >>
> >> _______________________________________________
> >> cfe-dev mailing list
> >> cfe-dev at lists.llvm.org
> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
> >>
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180628/3354230c/attachment.html>


More information about the cfe-dev mailing list