5.6 リンクに関する要件

Python ソースと一緒についてくるconfigure スクリプトは 動的にリンクされる拡張モジュールが必要とするシンボルを公開するよう ただしく Python をビルドしますが、この機能は Python ライブラリを静的に埋め込むようなアプリケーションには 継承されません。少なくとも Unix ではそうです。 これは、アプリケーションが静的な実行時ライブラリ (libpython.a) にリンクされていて、かつ (.so ファイルとして実装されている) 動的ロードされるような拡張モジュールをロードする必要がある場合に 起きる問題です。

問題になるのは、拡張モジュールが使うあるエントリポイントが Python ランタイムだけで定義されているという状況です。 埋め込みを行うアプリケーション側がこうしたエントリポイントを 全く使わない場合、リンカによってはエントリポイントを最終的に 生成される実行可能形式のシンボルテーブル内に含めません。 こうした場合、リンカに追加のオプションを与えて、これらのシンボルを 除去しないよう教える必要があります。

プラットフォームごとに正しいオプションを決めるのはかなり困難です、 とはいえ、幸運なことに、オプションは Python のビルド設定内にすでに あります。インストール済みの Python インタプリタからオプションを 取り出すには、対話インタプリタを起動して、以下のような短い セッションを実行します:

>>> import distutils.sysconfig
>>> distutils.sysconfig.get_config_var('LINKFORSHARED')
'-Xlinker -export-dynamic'

表示された文字列の内容が、ビルド時に使うべきオプションです。 文字列が空であれば、特に追加すべきオプションはありません。 LINKFORSHARED の定義内容は、 Python のトップレベル Makefile 内の同名の変数に対応しています。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。