–B nodirect オプションは、どの動的オブジェクトからの直接結合も回避する、もっとも簡単なメカニズムを提供します。このオプションはほかのオブジェクトから、また作成中のオブジェクト内からの直接結合を回避します。
次のコンポーネントを使用して、3 つの共有オブジェクト、A.so.1、O.so.1、およびX.so.1 を作成します。–B nodirect オプションを使用すると、A.so.1 は O.so.1 に直接結合されません。しかし、O.so.1 は、–z direct オプションを使用して X.so.1 への直接結合を引き続き確立できます。
$ cat a.c
extern int o(), p(), x(), y();
int a() { return (o() + p() - x() - y()); }
$ cat o.c
extern int x(), y();
int o() { return (x()); }
int p() { return (y()); }
$ cat x.c
int x() { return (1); }
int y() { return (2); }
$ cc -o X.so.1 -G -Kpic x.c
$ cc -o O.so.1 -G -Kpic o.c -Bnodirect -zdirect -R. X.so.1
$ cc -o A.so.1 -G -Kpic a.c -Bdirect -R. O.so.1 X.so.1
A.so.1 および O.so.1 のシンボル情報は、elfdump(1) で参照できます。
$ elfdump -y A.so.1
[1] DBL [3] X.so.1 x
[5] DBL [3] X.so.1 y
[6] DL [1] O.so.1 o
[9] DL [1] O.so.1 p
$ elfdump -y O.so.1
[3] DB [0] X.so.1 x
[4] DB [0] X.so.1 y
[6] N o
[7] N p
文字「N」は、関数 o() および p() に直接結合が許可されていないことを示しています。A.so.1 が –B direct オプションによって直接結合を要求したとしても、関数 o() および p() に直接結合は確立されません。O.so.1 は引き続き、–z direct オプションを使用して依存関係 X.so.1 への直接結合を要求できます。
Oracle Solaris ライブラリ libproc.so.1 は、–B nodirect オプションを使って作成されます。このライブラリのユーザーは、多くの libproc 関数に対して独自のコールバックインタフェースを用意することが求められています。libproc の依存関係から libproc 関数への参照は、いずれかのユーザー定義 (このような定義がある場合) に結合する必要があります。