[hjl@gnu-6 needed-5]$ cat foo.c extern void bar (); void foo () { bar (); } [hjl@gnu-6 needed-5]$ cat bar.c void bar () { } [hjl@gnu-6 needed-5]$ cat main.c extern void foo (); int main () { foo (); return 0; } [hjl@gnu-6 needed-5]$ make foo gcc -O -g -c -o main.o main.c gcc -O -g -fPIC -c -o bar.o bar.c gcc -shared -o libbar.so bar.o gcc -O -g -fPIC -c -o foo.o foo.c gcc -shared -o libfoo.so foo.o gcc -o foo main.o -Wl,--as-needed libfoo.so libbar.so -Wl,--no-as-needed -Wl,-rpath,. libfoo.so: undefined reference to `bar' collect2: ld returned 1 exit status make: *** [foo] Error 1 [hjl@gnu-6 needed-5]$
I guess it is OK since libfoo.so should be linked with libbar.so.