spk121 / guile-gi

Bindings for GObject Introspection and libgirepository for Guile
GNU General Public License v3.0
58 stars 7 forks source link

Make failed: ld returned 1 exit status #111

Closed yihuajack closed 2 years ago

yihuajack commented 3 years ago

System: WSL 1 Ubuntu 20.04 LTS libgc is manually built from latest source. The output of sudo make test:

make  check-am
make[1]: Entering directory '/home/ayka_tsuzuki/guile-gi'
/bin/bash ./libtool  --tag=CC   --mode=link gcc -std=c11 -pthread -I/usr/include/guile/3.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -pthread -I/usr/include/gobject-introspection-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include  -g -O2 -no-undefined -version-info 6:0:0 -export-symbols-regex '^gig_' -lguile-3.0 -lgc    -o libguile-gi.la -rpath /usr/lib/x86_64-linux-gnu/guile/3.0/extensions  src/libguile_gi_la-gig_argument.lo src/libguile_gi_la-gig_closure.lo src/libguile_gi_la-gig_data_type.lo src/libguile_gi_la-gig_object.lo src/libguile_gi_la-gig_value.lo src/libguile_gi_la-gig_signal.lo src/libguile_gi_la-gig.lo src/libguile_gi_la-gig_arg_map.lo src/libguile_gi_la-gig_callback.lo src/libguile_gi_la-gig_function.lo src/libguile_gi_la-gig_constant.lo src/libguile_gi_la-gig_flag.lo src/libguile_gi_la-gig_repository.lo src/libguile_gi_la-gig_document.lo src/libguile_gi_la-gig_type.lo src/libguile_gi_la-gig_type_private.lo src/libguile_gi_la-gig_util.lo src/libguile_gi_la-gig_logging.lo -lguile-3.0 -lgc  -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 -lglib-2.0 -lgobject-2.0 -lglib-2.0 -lffi
libtool: link: rm -fr  .libs/libguile-gi.exp .libs/libguile-gi.ver
libtool: link: /usr/bin/nm -B  src/.libs/libguile_gi_la-gig_argument.o src/.libs/libguile_gi_la-gig_closure.o src/.libs/libguile_gi_la-gig_data_type.o src/.libs/libguile_gi_la-gig_object.o src/.libs/libguile_gi_la-gig_value.o src/.libs/libguile_gi_la-gig_signal.o src/.libs/libguile_gi_la-gig.o src/.libs/libguile_gi_la-gig_arg_map.o src/.libs/libguile_gi_la-gig_callback.o src/.libs/libguile_gi_la-gig_function.o src/.libs/libguile_gi_la-gig_constant.o src/.libs/libguile_gi_la-gig_flag.o src/.libs/libguile_gi_la-gig_repository.o src/.libs/libguile_gi_la-gig_document.o src/.libs/libguile_gi_la-gig_type.o src/.libs/libguile_gi_la-gig_type_private.o src/.libs/libguile_gi_la-gig_util.o src/.libs/libguile_gi_la-gig_logging.o   | sed -n -e 's/^.*[     ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[         ][      ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' | /usr/bin/sed 's/.* //' | sort | uniq > .libs/libguile-gi.exp
libtool: link: /usr/bin/grep -E -e "^gig_" ".libs/libguile-gi.exp" > ".libs/libguile-gi.expT"
libtool: link: mv -f ".libs/libguile-gi.expT" ".libs/libguile-gi.exp"
libtool: link: echo "{ global:" > .libs/libguile-gi.ver
libtool: link:  cat .libs/libguile-gi.exp | sed -e "s/\(.*\)/\1;/" >> .libs/libguile-gi.ver
libtool: link:  echo "local: *; };" >> .libs/libguile-gi.ver
libtool: link:  gcc -shared  -fPIC -DPIC  src/.libs/libguile_gi_la-gig_argument.o src/.libs/libguile_gi_la-gig_closure.o src/.libs/libguile_gi_la-gig_data_type.o src/.libs/libguile_gi_la-gig_object.o src/.libs/libguile_gi_la-gig_value.o src/.libs/libguile_gi_la-gig_signal.o src/.libs/libguile_gi_la-gig.o src/.libs/libguile_gi_la-gig_arg_map.o src/.libs/libguile_gi_la-gig_callback.o src/.libs/libguile_gi_la-gig_function.o src/.libs/libguile_gi_la-gig_constant.o src/.libs/libguile_gi_la-gig_flag.o src/.libs/libguile_gi_la-gig_repository.o src/.libs/libguile_gi_la-gig_document.o src/.libs/libguile_gi_la-gig_type.o src/.libs/libguile_gi_la-gig_type_private.o src/.libs/libguile_gi_la-gig_util.o src/.libs/libguile_gi_la-gig_logging.o   -lguile-3.0 -lgc -lgirepository-1.0 -lgobject-2.0 -lglib-2.0 -lffi  -pthread -pthread -g -O2   -pthread -Wl,-soname -Wl,libguile-gi.so.6 -Wl,-version-script -Wl,.libs/libguile-gi.ver -o .libs/libguile-gi.so.6.0.0
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libgc.a(thread_local_alloc.o): relocation R_X86_64_TPOFF32 against symbol `GC_thread_key' can not be used when making a shared object; recompile with -fPIC
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:1199: libguile-gi.la] Error 1
make[1]: Leaving directory '/home/ayka_tsuzuki/guile-gi'
make: *** [Makefile:2245: check] Error 2

The output of sudo make is attached here: guile-gi.txt

LordYuuma commented 3 years ago

Is libgc statically linked in this context?

yihuajack commented 3 years ago

I'm not sure whether it is caused by libgc ... it seems that libgc is not linked in the Makefile.

LordYuuma commented 3 years ago

libgc will get pulled indirectly through libguile. The symbol GC_thread_key looks like it'd belong to it and libgc.a very much looks like it's being linked statically. That won't work for a dynamic library like Guile-GI, but I wonder how you even got Guile to link (doesn't Guile itself already try to build a shared object?).

yihuajack commented 3 years ago

I see what you mean. I think the possible reason is that to "fix" the broken guile, I previously use bdwgc to replace libgc (maybe libgc has been corrupted before).

LordYuuma commented 3 years ago

Check whether Guile's pkg-config file correctly pulls in bdwgc instead of libgc and that you're using the "fixed" Guile during configure.

spk121 commented 2 years ago

Closing for lack of response. Feel free to reopen if you still need help with this.