> According to notting and the experimentation that I did after the FESCo
> meeting, the shared libraries bring in any libraries that they depend on.
> However, if the application linking to the shared library also requires the
> third shared library but doesn't explicitly link it then the link will fail.
> libfoo requires libbar.
> This is used to link: gcc -o libfoo.so -lbar foo.o
> libfoo.so contains the dependency on libbar.
> Scenario 1:
> /usr/bin/baz depends on symbols in libfoo but not libbar.
> This can be used to link: gcc -o baz -lfoo baz.o
> The link succeeds and the resulting /usr/bin/baz links to both libfoo.so and
> libbar.so as expected.
> Scenario 2:
> /usr/bin/baz depends on symbols in both libfoo and llibbar
> This fails to link because of missing libbar: gcc -o baz -lfoo baz.o
> This succeeds: gcc -o baz -lfoo -lbar baz.o
> Roland, can you clarify that this is indeed how things are supposed to work?
Yes, that's correct. A common example seems to be -lm. If you use 'pow'
(or whatever), then you should pass -lm. If some other library you use
happens to use -lm at the moment, that doesn't mean you shouldn't pass -lm
when you are using some API symbols from -lm.
> Also... it took me quite a while to come up with the command line flags on
> F12 that would allow me to test this (I think I had to get gcc to show me
> the linker invokation it used and then run those linker lines with my
> modifications), can you tell us what command line flags let us test out the
> differences in behaviour on F12?
You can always pass extra linker flags through gcc with -Wl,--foo.
You can give as many of these as you like, and -Wl,a,b is the same
as -Wl,a -Wl,b (both mean to pass "a" and "b" arguments on to ld).
On F12 (or F11) you can use 'gcc -Wl,--no-add-needed' to get the
new linking semantics. e.g.,
probably works on many packages if you want to try a manual build of
something this way.