GLib jest mi potrzebne do kompilacji i uruchomienia oprogramowania Syslog-ng.
Poniżej zapis sesji konfiguracji i kompilacji GLib 2.28.7. Skrypt w załączniku.
soft@wega:~/glib% ./drf_glib-2.28.7_conf
cc: Sun C 5.10 SunOS_sparc 2009/06/03
usage: cc [ options] files. Use 'cc -flags' for details
MANPATH=/usr/local/share/man:/usr/local/man:/usr/share/man
PATH=/usr/local/bin:/usr/bin:/opt/SUNWspro/bin:/usr/ccs/bin
CFLAGS=-fast
CPPFLAGS=-I/usr/local/include
CXXFLAGS=-fast
LDFLAGS=-L/usr/local/lib -R/usr/local/lib
=============================================
gmake clean [y|n] ?
n
=============================================
configure [y|n] ?
y
...
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing default-1 commands
config.status: executing libtool commands
config.status: executing glib/glibconfig.h commands
config.status: executing chmod-scripts commands
=============================================
gmake [y|n] ?
y
gmake all-recursive
gmake[1]: Entering directory `/home/soft/glib/glib-2.28.7'
Making all in .
...
CC mem-overflow.o
"mem-overflow.c", line 103: zero-sized struct/union
cc: acomp failed for mem-overflow.c
gmake[4]: *** [mem-overflow.o] Error 1
gmake[4]: Leaving directory `/home/soft/glib/glib-2.28.7/glib/tests'
gmake[3]: *** [all-recursive] Error 1
gmake[3]: Leaving directory `/home/soft/glib/glib-2.28.7/glib'
gmake[2]: *** [all] Error 2
gmake[2]: Leaving directory `/home/soft/glib/glib-2.28.7/glib'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/home/soft/glib/glib-2.28.7'
gmake: *** [all] Error 2
=============================================
Powyższy błąd wynika z tego, że kompilator z Sun Studio jest bardziej restrykcyjny niż GCC i nie dopuszcza pustych struktur. Spróbujemy to obejść poprzez dodanie -features=extensions do flag kompilatora. Puszczamy wszystko od początku:
soft@wega:~/glib% ./drf_glib-2.28.7_conf
cc: Sun C 5.10 SunOS_sparc 2009/06/03
usage: cc [ options] files. Use 'cc -flags' for details
MANPATH=/usr/local/share/man:/usr/local/man:/usr/share/man
PATH=/usr/local/bin:/usr/bin:/opt/SUNWspro/bin:/usr/ccs/bin
CFLAGS=-fast -features=extensions
CPPFLAGS=-I/usr/local/include
CXXFLAGS=-fast -features=extensions
LDFLAGS=-L/usr/local/lib -R/usr/local/lib
=============================================
gmake clean [y|n] ?
y
Making distclean in build
...
rm -f Makefile
=============================================
configure [y|n] ?
y
...
=============================================
gmake [y|n] ?
y
gmake all-recursive
...
CC mem-overflow.o
"mem-overflow.c", line 103: warning: zero-sized struct/union
CCLD mem-overflow
...
Teraz wprawdzie zgłasza ostrzeżenie, ale już nie jest tak restrykcyjny i kompilacja przechodzi dalej. Ale to jeszcze nie koniec kłopotów z kompilacją, można natrafić coś takiego:
...
Undefined first referenced
symbol in file
socketpair socket.o (symbol belongs to implicit dependency /lib/libsocket.so.1)
socket socket.o (symbol belongs to implicit dependency /lib/libsocket.so.1)
ld: fatal: Symbol referencing errors. No output written to .libs/socket
gmake[4]: *** [socket] Error 1
gmake[4]: Leaving directory `/home/soft/glib/glib-2.28.7/gio/tests'
gmake[3]: *** [all-recursive] Error 1
gmake[3]: Leaving directory `/home/soft/glib/glib-2.28.7/gio'
gmake[2]: *** [all] Error 2
gmake[2]: Leaving directory `/home/soft/glib/glib-2.28.7/gio'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/home/soft/glib/glib-2.28.7'
gmake: *** [all] Error 2
Tu sprawę powinno załatwić dodanie -lsocket do LDFLAGS lub LIBS.
...
gmake[2]: Leaving directory `/home/soft/glib/glib-2.28.7/docs'
gmake[1]: Leaving directory `/home/soft/glib/glib-2.28.7'
Compilation successful
=============================================
Test (gmake test || gmake check) [y|n] ?
y
gmake[1]: Entering directory `/home/soft/glib/glib-2.28.7/m4macros'
gmake[1]: Leaving directory `/home/soft/glib/glib-2.28.7/m4macros'
gmake[1]: Entering directory `/home/soft/glib/glib-2.28.7/glib'
...
/strfuncs/strtod:
** ERROR **: g_ascii_strtod on "0xa.b" for locale sv_SE failed
expected 10.687500 (nan 0) actual 0.000000 (nan 0)
aborting...
FAIL
GTester: last random seed: R02S655d4fa06d99d55bc60b26ed0e997b61
/bin/bash: line 1: 2617 Terminated MALLOC_CHECK_=2 MALLOC_PERTURB_=$((${RANDOM:-256} % 256)) ../../glib/gtester --verbose testing option-context keyfile fileutils test-printf protocol rand strfuncs string markup-parse markup-collect markup-escape markup-subparser array-test hostutils gvariant mem-overflow utils regex base64 sequence scannerapi shell collate utf8-pointer utf8-validate utf8-misc checksum hash date node convert list slist queue tree uri dir pattern logging error bookmarkfile gdatetime timeout environment
gmake[2]: *** [test-nonrecursive] Error 143
gmake[2]: Leaving directory `/home/soft/glib/glib-2.28.7/glib/tests'
gmake[3]: *** [check-am] Error 2
gmake[3]: Leaving directory `/home/soft/glib/glib-2.28.7/glib/tests'
gmake[2]: *** [check-recursive] Error 1
gmake[2]: Leaving directory `/home/soft/glib/glib-2.28.7/glib'
gmake[1]: *** [check] Error 2
gmake[1]: Leaving directory `/home/soft/glib/glib-2.28.7/glib'
gmake: *** [check-recursive] Error 1
Niestety testy nie przechodzą gładko, ale mimo to zainstaluję GLib.
# gmake install
# ls -la /usr/local/lib/libglib-2.0.*
-rwxr-xr-x+ 1 root root 1033 May 23 15:30 /usr/local/lib/libglib-2.0.la
lrwxrwxrwx 1 root root 23 May 23 15:30 /usr/local/lib/libglib-2.0.so -> libglib-2.0.so.0.2800.7
lrwxrwxrwx 1 root root 23 May 23 15:30 /usr/local/lib/libglib-2.0.so.0 -> libglib-2.0.so.0.2800.7
-rwxr-xr-x+ 1 root root 1757612 May 23 15:30 /usr/local/lib/libglib-2.0.so.0.2800.7