index -summary -history -testscript perl / python problems -with callframes -with structures -largefile seeks -broken builds systems -freeBSD/darwin -linux/solaris -64on32 mix -distro makers -win32/other (2) libraries - libc ..(3264)
- zlib ..(-32-)
- gtk2 ..(-64-)
converting -old non-off_t code -going largefile -longlong default -face dualmode -make twinlibs -and defend (it) programming -largefile default -off_t in headers -make export64 -find mismatch -the autowrappers -environ changes -best practice? old library -dualmode renames -the extra function -largefile64_source -glibc headers -libgz example *** new library -dual export -largefiles win32 -compat32 calls -compat32 library -long32 dualmode links -some quotes -sitemap / mpl -large.file Group* -ac-archive Site*
(C) 2006-01-13 Guido U. Draheim |
Broken Builds
Using the testscripts we find that
most Linux/Solaris distributions contain broken builds - as they
import both off32_t symbols and off64_t symbols. Also
there are some reports with people using autoconf
The reason: on a 64on32 largefile sensitive system you do need to have a C preprocessor #define to exist before any #include of a system header. Most global include headers will somehow include the libc headers, so depending on the order you may or may not get the 32bit symbols or the 64bit symbols for file access to be linked into your program. Especially, this is a problem for BIG projects - some subproject may have used the --enable-largefile correctly but the other did not; yet they are linked very closely with each other thereby passing filepointers back and forth. The common errors are:
The situation is very very very dangerous - because big projects are often used by many applications that build upon them but opensource big projects have higher probability to errornously create a broken build by adding third party code. A testscript check on Suse-10.0 (January 2006) reveals these broken builds: libblkid.so.1.0 libext2fs.so.2.4 libGL.so.1.0.7676 libgcj.so.6.0.0 libmono.so.0.0.0 libmonodebuggerserver.so.0.0.0 libnetpbm.so.10.26 libnspr4.so libquicktime.so.0.0.0 libtcl8.4.so
These may corrupt multi-gigabyte data files all on their own.
Hint: it can help to modify the toplevel makefile adding |