It took some time to figure out, but it wasn't a configuration issue. At least, not on my part - it turns out that the "j" printf/etc length is used in 40 places in the code. This is a fairly recent introduction to the c library, and is not supported under Solaris 8 (it is under Solaris 10). gcc 4.4.0 recognizes it, though, so doesn't complain.
Unfortunately, the library specifies "If a length modifier appears with any conversion specifier other than as specified above, the behavior is undefined." In this case, writing with it resulted in 0 being written, and reading with it failed. So it was very annoying to track down. Changing all the "j" lengths to "ll" (and recompiling) solved the problem. This is likely an issue for any machine whose libc does not support the "j" length.
