|
Errata
The first printing (October 2000) and second printing (2001)
each contain a number of minor typographical errors, detailed on
this page. The html version
of the text does not have these errors. If you discover any
more errors, either here or in a printed version of the book, then
please do mail me so that I can
list them here for the benefit of other readers, and perhaps have
them fixed in the next printing.
- frontmatter:
-
We should have included an easy to find reference to the
book's web site, http://www.samspublishing.com/title/1578701902 somewhere in the
frontmatter.
- page xx:
-
- Please replace `momospaced' with `monospaced'.
- The font used is not Courier, it is some sort of
sans-serif.
- Shell log lines typed by the user are not
emboldened.
- p 20, para. 2:
-
There is a sentence missing near the end of this
paragraph:
$@ is available in any rule, but for some
versions of make $< is only available in
suffix rules. Here is a simple Makefile:
|
- p 20, example 1:
-
This example should not use $<, and should
instead read as follows:
all: dummy
@echo "$@ depends on dummy"
dummy:
touch $@
|
- p 22, para. 5:
- The file `nly.c' should have been listed as one of
the C source files.
- p. 54, example 2:
-
The last line should read:
[$Xsed -e 's/\.[^.]* /.\$U&/g;s/\.[^.]*$/.\$U&/']`
|
(the /\ are typeset wrong; there is a missing space; the
difference between ` and ' is very hard to see in this
font)
The additional level of `[..]' quotes is necessary to
prevent autoconf from doing m4 quote substitution in the sed
expression.
- p. 61, para. 1:
-
The use of bzero needs to be explained:
Notice in the code above, that xcalloc is
implemented in terms of xmalloc, since
calloc itself is not available in some
older C libraries. Also, the bzero
function is actually deprecated in favour of
memset in modern C libraries -- I'll
explain how to take this into account in section
7.2.3, Beginnings of a configure.in.
|
- p. 67, between para. 3 and para. 4:
-
The forward reference from the previous errata needs
to be added:
Recall that the use of bzero in the Memory
Management subsection, of section 7.2.1, is not
entirely portable. The trick is to provide a
bzero work-alike, depending on which
functions Autoconf detects. Add the following
towards the end of configure.in:
...
AC_CHECK_FUNCS(bzero memset, break)
...
With the addition of this small snippet of code to
common.h, I can now make use of
bzero even when linking with a C library
that has no implementation of its own:
#if !HAVE_BZERO && HAVE_MEMSET
# define bzero(buf, bytes) ((void) memset (buf, 0, bytes))
#endif
|
- p. 83, terminology sidebar:
-
This could be clearer. Substitute the following:
The sheer number of uses of the word library' in
this book could be easily very confusing. In this
chapter and throughout the rest of the book, I will
refer to various kinds of libraries as follows:
- `native'
- Low level libraries, that is, libraries
provided by the host architecture.
- `Libtool library'
- The kind of library built by Libtool. This
encompasses both the shared and static native
components of the implementation of the named
library.
- `pseudo-library'
- The high level `.la' file produced
by Libtool. The `pseudo-library' is not a library
in its own right, but is treated as if it were from
outside the Libtool interface.
Furthermore, in the context of Libtool, there is
another subtle (but important) distinction to be
drawn:
- `static library'
- A Libtool library which has no shared archive
component.
- `static archive'
- The static component of a Libtool library.
|
- p. 93, penultimate para.:
-
Poor punctuation. Better that it read like this:
The link warning tells you that libtool
knows that on HP-UX the program will stop working if
it is copied directly to the installation directory;
to prevent it from breaking, libtool
relinks the program when it is installed (see ...
|
-
- p. 93, last para.:
-
Poor punctuation again. The last sentence should
begin:
Often this is what you want, if the library...
(The comma following ``Often'' should be removed).
-
- p. 112, example 1:
-
Similarly:
LTLIBOBJS=`echo X"$LIBOBJS" | \
[$Xsed -e "s,\.[^.]* ,.lo ,g;s,\.[^.]*$,.lo,"]`
|
(filling and spacing has broken the typeset version)
The additional level of `[..]' quotes is necessary to
prevent autoconf from doing m4 quote substitution in the sed
expression.
- p. 112, example 2:
-
And again:
LTALLOCA=`echo X"$ALLOCA" | [$Xsed -e "s,\.[^.]*$,.lo,"]`
|
(the | is typeset differently to the other examples)
The additional level of `[..]' quotes is necessary to prevent
autoconf from doing m4 quote substitution in the sed
expression.
- p. 126/127, example at top of p.127:
-
The example should not be calculating
LTALLOCA, but rather LTLIBOBJS as
mentioned in the following paragraph. The penultimate
paragraph of code should be as follows:
Xsed="sed -e s/^X//"
LTLIBOBJS=`echo X"$LIBOBJS" | \
[$Xsed -e "s,\.[^.]* ,.lo ,g;s,\.[^.]*$,.lo,"]`
|
- p. 134, example 2:
-
And again:
Xsed="sed -e s/^X//"
LTLIBOBJS=`echo X"$LIBOBJS" | \
[$Xsed -e "s,\.[^.]* ,.lo ,g;s,\.[^.]*$,.lo,"]`
|
(we should have used Xsed for consistency, and both ` were
missing)
The additional level of `[..]' quotes is necessary to
prevent autoconf from doing m4 quote substitution in the sed
expression.
- p. 137, para. 3:
-
Poor grammar. The next to last sentence of this
paragraph should have said:
The purpose of this file is to be
#included from all the project source
files.
- p. 138, para. 2:
-
Excessive commas. The para. should start with:
The Autoconf macro AC_OUTPUT_COMMANDS provides a way
to solve this problem.
- p. 143, example 1:
-
The full example should read as follows:
docdir = $(top_builddir)/doc
html:
echo Making $@ in $(docdir)
cd $(docdir) && make $@
|
(`@' missing from both `$@')
- p. 205, last para.:
-
Should have been typeset like the others on the following
page (full width, with ``Function'' right justified on the
header line.
- p. 200, main declaration.:
-
The argv parameter is missing its [].
- p. 202, example. 3:
-
The full example should read as follows:
$ gcc -fPIC -c simple-module.c
$ gcc -shared -o simple-module.so simple-module.o
|
(missing object file on second line)
- p. 226, para. 3:
-
sym_prefix should be emboldened, and is a ``Variable'',
not a ``Function''.
- p. 227, para. 1:
- A ``Variable'', not a ``Function''.
- p. 268, example 1:
- This should more properly say:
$ ls -d /usr/bin/* | wc -l
sh: error: line too long
|
It is the use of * that causes the problem,
not the lack of a directory change.
- p. 271, example. 1:
-
The `do' is missing from the innermost for loop:
for dir
do
shell="$dir/$cmd"
...
done
|
- p. 276, para. 5:
- This should be a reference to section 21.2.4, as it
refers to the self executing script in that section.
- p. 290, para. 1:
- Please add the following sentence to the end of the
paragraph:
Note that the name of the cache variable must contain
`_cv_' in order to be saved correctly.
- p. 290, para. 4:
- The link to the autoconf macro archive doesn't work
anymore. Instead, you should use http://www.gnu.org/software/ac-archive
- p. 303, para. 3:
-
More specifically:
as far back as version 2.0 as best as I can tell.
- p. 316, para. 1:
- AC_EXEEXT is not a Libtool macro, it is an
Autoconf macro.
Also the first printing (October 2000) contains an additional
error:
- p. 227, para. 4:
- Missing underscore in lt_dlseterror.
|