what causes Clang to use libgcc_s.so in FreeBSD 12.0-R linker
Tijl Coosemans
tijl at FreeBSD.org
Sun Feb 24 19:45:02 UTC 2019
On Wed, 13 Feb 2019 17:31:46 -0800 "Jin Guojun[VFF]" <jguojun at gmail.com>
wrote:
> Following CC command used for build a shared library that worked on all
> FreeBSD releases before 12-R.
>
> The -v CC option shows that linker indeed involves libgcc and gcc_s
> somehow, but no -static option was shown. Not clear what the error
> message implies. Also, none of these source code has GNU stuff in it and
> what linker tried to do with gcc libraries?
>
> Is something changed for building shared libraries under 12-R?
>
> Thanks,
>
> -Jin
>
>
> FBSD12: cc -Wl,-r -o libccs.so `lorder avail_type.so arg_vc.so
> c_array.so calibrate.so colortog
> .so c_map.so colort90.so dbvfft3d.so eta.so errors.so filter_f.so
> fits_io.so fourier.so gaussian
> .so glb_vars.so histgram.so icc_r.so io_ready.so libpbm.so libpbm2.so
> libpbm4.so libpgm1.so libp
> pm1.so libppm3.so libpbm1.so ln2argv.so message.so pict_r.so pgm_r.so
> q_sort.so rotate90.so t_co
> nsum.so tv_random.so time-out.so dbg_memsz.so to_sep.so to_8.so
> quantto8.so sub_mean.so zalloc.s
> o vfft3d.so vfft_2p.so c_map1.so c_to_c.so buffernw.so checksum.so
> dicm_h.so dir_unix.so eget_ws
> z.so gif_r.so ip-hdr.so private.so piperead.so parsargu.so rast_r.so
> sock_cnct.so sock_init.so s
> ock_subr.so swap_all.so table_if.so tv_empty.so tvmath.so u_db.so
> zreopen.so pip_read.so | tsort
> `
>
> /usr/bin/ld: error: attempted static link of dynamic object
> /usr/lib/libgcc_s.so
> /usr/bin/ld: error: attempted static link of dynamic object
> /usr/lib/libgcc_s.so
> cc: error: linker command failed with exit code 1 (use -v to see invocation)
> *** Error code 1 (ignored)
>
> FBSD12: cc -v -Wl,-r -o libccs.so `lorder avail_type.so arg_vc.so
> c_array.so calibrate.so colortog.so c
> _map.so colort90.so dbvfft3d.so eta.so errors.so filter_f.so fits_io.so
> fourier.so gaussian.so g
> lb_vars.so histgram.so icc_r.so io_ready.so libpbm.so libpbm2.so
> libpbm4.so libpgm1.so libppm1.s
> o libppm3.so libpbm1.so ln2argv.so message.so pict_r.so pgm_r.so
> q_sort.so rotate90.so t_consum.
> so tv_random.so time-out.so dbg_memsz.so to_sep.so to_8.so quantto8.so
> sub_mean.so zalloc.so vff
> t3d.so vfft_2p.so c_map1.so c_to_c.so buffernw.so checksum.so dicm_h.so
> dir_unix.so eget_wsz.so
> gif_r.so ip-hdr.so private.so piperead.so parsargu.so rast_r.so
> sock_cnct.so sock_init.so sock_s
> ubr.so swap_all.so table_if.so tv_empty.so tvmath.so u_db.so zreopen.so
> pip_read.so | tsort`
> FreeBSD clang version 6.0.1 (tags/RELEASE_601/final 335540) (based on
> LLVM 6.0.1)
> Target: x86_64-unknown-freebsd12.0
> Thread model: posix
> InstalledDir: /usr/bin
> "/usr/bin/ld" --eh-frame-hdr -dynamic-linker /libexec/ld-elf.so.1
> --hash-style=both --enable-ne
> w-dtags -o libccs.so /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o
> -L/usr/lib -r pip_read.
> so zreopen.so u_db.so tv_empty.so table_if.so rast_r.so parsargu.so
> piperead.so private.so ip-hd
> r.so gif_r.so eget_wsz.so dir_unix.so dicm_h.so checksum.so buffernw.so
> c_map1.so vfft_2p.so sub
> _mean.so to_8.so to_sep.so dbg_memsz.so time-out.so tv_random.so
> t_consum.so pgm_r.so pict_r.so
> ln2argv.so libppm3.so libppm1.so libpgm1.so libpbm2.so libpbm.so
> io_ready.so icc_r.so histgram.s
> o glb_vars.so gaussian.so fits_io.so filter_f.so eta.so dbvfft3d.so
> colort90.so c_map.so colorto
> g.so calibrate.so c_array.so arg_vc.so avail_type.so tvmath.so
> swap_all.so sock_init.so sock_cnc
> t.so vfft3d.so quantto8.so rotate90.so q_sort.so libpbm1.so libpbm4.so
> fourier.so sock_subr.so c
> _to_c.so zalloc.so errors.so message.so -lgcc --as-needed -lgcc_s
> --no-as-needed -lc -lgcc --as-
> needed -lgcc_s --no-as-needed /usr/lib/crtend.o /usr/lib/crtn.o
> /usr/bin/ld: error: attempted static link of dynamic object
> /usr/lib/libgcc_s.so
> /usr/bin/ld: error: attempted static link of dynamic object
> /usr/lib/libgcc_s.so
> cc: error: linker command failed with exit code 1 (use -v to see invocation)
I'm not really sure what you are trying to do. You are using -Wl,-r
which suggest you want to combine multiple object files into a single
object file. Normally the extension .o is used for object files but you
are using .so, which is normally used for libraries. Then the output is
named libccs.so which suggests you want to create a library. It's
confusing.
If you want to combine object files you should not use cc, but ld:
ld -r -o libccs.so ...
If you want to create a shared library use this:
cc -shared -o libccs.so ...
More information about the freebsd-questions
mailing list