[cfe-dev] Static linking a program

mats petersson via cfe-dev cfe-dev at lists.llvm.org
Wed Jun 27 08:02:54 PDT 2018


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?
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.65910f0244bf4b62905c0198842b62
>> d4.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/20180627/1fc827e0/attachment.html>


More information about the cfe-dev mailing list