On Unix-like operating systems, the order in which static libraries are specified when invoking the linker is important, because by default, the linker uses one pass though the libraries list. Passing the libraries in the incorrect order will lead to a link error. Further, this behaviour is often used to make one library override symbols from another. So, sometimes it is necessary to force specific library linking order.
Boost.Build tries to automatically compute the right order. The primary
rule is that if library a
"uses" library b
, then
library a
will appear on the command line before library
b
. Library a
is considered to use b
if b
is present either in the a
library's
sources or its usage is listed in its requirements. To explicitly specify
the use
relationship one can use the
<use>
feature. For example, both of the following
lines will cause a
to appear before b
on the
command line:
lib a : a.cpp b ; lib a : a.cpp : <use>b ;
The same approach works for searched libraries as well:
lib z ; lib png : : <use>z ; exe viewer : viewer png z ;