Hi John, The linker only pulls out .o from the .a that fulfill currently known (single pass) missing symbols. The linker also takes any .o in its entirety, it doesn't check for missing symbols. With the GNU linker, there is the -whole-archive switch. So if you want libfoo.a wholesale, but libbar.a and libquux.a to only be used to fulfill missing symbols, do something like this: gcc -o myapp alpha.c beta.c gamma.o delta.o -L. -Wl,-whole-archive -lfoo -Wl,-no-whole-archive -lbar -lquux Because the linker perfoms a single pass for resolution of missing symbols in libraries (.so, or .a), order is very important. And if you had an interdependency (ick ick! avoid avoid!) between, say, bar and quux, you may need to do something distasteful like -lbar -lquux -lbar. HTH, --Eljay