MisterXYX83
MisterXYX83

Reputation: 87

ARM Cross Compile GLib 2.33.10, linker error

I'm a newbie and i'm working on Raspberry Pi. I've an issue with GLIB 2.33.10 cross compilation. I've downloaded sources from site and all dependencies (zlib, ffi); dependencies have been built for ARM well (tested on Raspberry). I'm currently using the arm-bcm2708hardfp-linux-gnueabi toolchain.

My configure command line is the following:

$ ZLIB_CFLAGS=-I/home/myuser/cross_lib/include/libzlib \
ZLIB_LIBS="-L/home/myuser/cross_lib/lib/libzlib/raspberry -lz" \
LDFLAGS="-L/home/myuser/cross_lib/libffi/lib -lffi -L/home/myuser/cross_lib/lib/libzlib/raspberry -lz" 
LIBFFI_CFLAGS=-I/home/myuser/cross_lib/libffi/lib/libffi-3.0.11/include \
LIBFFI_LIBS="-L/home/myuser/cross_lib/libffi/lib -lffi" \
./configure --host=arm-bcm2708hardfp-linux-gnueabi glib_cv_stack_grows=yes \
glib_cv_uscore=yes ac_cv_func_posix_getpwuid_r=no \
ac_cv_func_posix_getgrgid_r=no --with-libiconv=no --without-pcre \
--enable-gtk-doc-html=no --enable-xattr=no --prefix=/home/cross_lib/glib23

as you can see i've disabled iconv and pcre (it is only a test build); configure script is ok (it seems to be ok...). when starting building process, it goes on for a while (compile a lot of code) and then stucks in the linking stage:

/opt/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/../lib/gcc/arm-bcm2708hardfp-linux gnueabi/4.7.1/../../../../arm-bcm2708hardfp-linux-gnueabi/bin/ld: warning: libgthread-2.0.so.0, needed by ../gobject/.libs/libgobject-2.0.so, not found (try using -rpath or -rpath-link)
/opt/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/../lib/gcc/arm-bcm2708hardfp-linux-gnueabi/4.7.1/../../../../arm-bcm2708hardfp-linux-gnueabi/bin/ld: warning: libgmodule-2.0.so.0, needed by ./.libs/libgio-2.0.so, not found (try using -rpath or -rpath-link)
./.libs/libgio-2.0.so: undefined reference to `g_module_close'
./.libs/libgio-2.0.so: undefined reference to `g_module_symbol'
./.libs/libgio-2.0.so: undefined reference to `g_module_supported'
./.libs/libgio-2.0.so: undefined reference to `g_module_open'
./.libs/libgio-2.0.so: undefined reference to `g_module_error'
collect2: error: ld returned 1 exit status
make[4]: *** [glib-compile-resources] Errore 1
make[4]: uscita dalla directory "/home/myuser/cross_lib/source/glib-2.33.10/gio"
make[3]: *** [all-recursive] Errore 1
make[3]: uscita dalla directory "/home/myuser/cross_lib/source/glib-2.33.10/gio"
make[2]: *** [all] Errore 2
make[2]: uscita dalla directory "/home/myuser/cross_lib/source/glib-2.33.10/gio"
make[1]: *** [all-recursive] Errore 1
make[1]: uscita dalla directory "/home/myuser/cross_lib/source/glib-2.33.10"
make: *** [all] Errore 2

it looks like a strange error for me it can't find its own libraries...but i'm not an expert...anyone can help me? thanks in advice and excuse me for my bad english

Upvotes: 4

Views: 6681

Answers (3)

Phlox Midas
Phlox Midas

Reputation: 4349

Building on Anon's answer, here's the section from my DOckerfile. The trick is making, letting it fail, and making again with a flag:

RUN printf "glib_cv_stack_grows=no\nglib_cv_uscore=no\n" > mips.cache
RUN ZLIB_CFLAGS="-I${PREFIX}/include" \
    ZLIB_LIBS="-L${PREFIX}/lib/ -lz" \
    LIBFFI_CFLAGS="-I${PREFIX}/include/" \
    LIBFFI_LIBS="-L${PREFIX}/lib/ -lffi" \
    LD_LIBRARY_PATH="$PWD/gmodule/.libs -lgmodule-2.0" \
    LD=mips-linux-gnu-ld \
    AR=mips-linux-gnu-ar \
    ./autogen.sh --host=mips-linux-gnu --prefix=$PREFIX \
    --disable-man --disable-libmount --disable-largefile --disable-fam \
    --disable-xattr --disable-libelf --with-pcre=internal --disable-static \
    --cache-file=mips.cache
RUN make -j 8; exit 0 && \
    make LDFLAGS="-rpath $PWD/gmodule/.libs" -j 8 && \
    make install

Upvotes: 0

nitin kumar
nitin kumar

Reputation: 652

just add -lgmodule-2.0 in LDFLAGS at the end

Upvotes: 2

Anon
Anon

Reputation: 291

This worked for me with glib 2.36.4:

$ make LDFLAGS="-rpath $PWD/gmodule/.libs"

Upvotes: 1

Related Questions