Weak Link

ちょっとだけ名前を出した__attribute__((weak))ですが、こんな機能です。

package p is
   function pow10(x : Long_Float) return Long_Float;
   pragma Import(C, pow10);
   pragma Weak_External(pow10);
end p;
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Long_Float_Text_IO; use Ada.Long_Float_Text_IO;
with System; use System;
with p; use p;
procedure test is
begin
   if pow10'Address /= Null_Address then
      Put("pow10:");
      Put(pow10(3.0));
   else
      Put("operator:");
      Put(10.0 ** 3);
   end if;
end test;

Weak_Externalを指定しておくと、存在しない外部シンボルを参照しても、ldがエラーを出しません。アドレスは0になります。例ですと、MinGWではpow10が無いため下が実行されます。
以下が詳しいです。
http://developer.apple.com/jp/technotes/tn2064.html
これを使えば、コンパイル時ではなくて実行時まで、特定のライブラリが無かったら〜みたいな処理を伸ばすことができて、再コンパイルなしに軽量モードと全機能モードみたいな使い分けが可能じゃないか……みたいなことを考えたのですが、別にWeak Linkが無くてもnoeh32.libみたいにすれば可能な話ですので、やっぱり要らないんじゃないかと思う次第です。
レベル-4の壁は厚い。