高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1233
'dynamic shared library not made a weak library in output
with MACOSX_DEPLOYMENT_TARGET...' bug


Q: ビルドを行おうとするときに ld が MACOSX_DEPLOYMENT_TARGET 環境変数についての警告を発行し、ウィークリンクに失敗するのはなぜでしょうか?

A: December 2002 Mac OS X Developer Tools を使って Project Builder でビルドすると、次の警告が表示されることがあります。

ld: warning dynamic shared library:

/path/to/a/library/or/framework/that/you/link/against not made a weak library in output with MACOSX_DEPLOYMENT_TARGET environment variable set to: 10.1

これはおそらく、不具合 #3094497 によるものであり、Mac OS X Developer Tools の次のメジャーリリースでは修正される予定です。何が起こっているかを以下に説明します。ld によってリストされたフレームワークまたはライブラリ(ライブラリ A と呼びます)は、アプリケーションによってリンクされますが、ライブラリ A のシンボルを直接には使用しません。リンクして使っているフレームワークまたはライブラリ(ライブラリ B と呼びます)がもう 1 つあり、これがライブラリ A のシンボルを実際に使用しています。リンカは混乱して、ライブラリ A に強くリンクすべきときに、ウィークリンクしようとします。デフォルトでは、MACOSX_DEPLOYMENT_TARGET 環境変数(特定の OS バージョンに導入されたバイナリ機能を制御します)は 10.1 に設定されており、ウィークリンクは 10.2 から導入されているため、このような警告が出されます。

当面は、次の 2 つの回避策をとることが推奨されます。

1) ライブラリ A にウィークリンクすることと、Mac OS X 10.2 以上を実行する必要があることを気にしなければ、Project Builder のターゲットのビルド設定で、MACOSX_DEPLOYMENT_TARGET を 10.2 に設定できます。この後、(PFE のような新しいプリコンパイル済みヘッダ技術の代わりに)cpp-precomp プリコンパイル済みヘッダ技術を使用している場合は、プリコンパイル済みヘッダが壊れているという警告が多数表示される場合があります。これを修正するには、ターミナルから、次のようにしてプリコンパイル済みヘッダを再ビルドする必要があります。

setenv MACOSX_DEPLOYMENT_TARGET 10.2

sudo fixPrecomps -force

2) Mac OS X 10.1 以上を対象にビルドする必要がある場合、または、ライブラリ A へのウィークリンクを開始したくない場合は、ライブラリ A のシンボルへの実際には使われない余分な参照を 1 つ作成して、リンカにライブラリ A に強くリンクさせることができます。


[2003 年 4 月 1 日]