そこで、MySQL とMySQLclient-pythonの静的バージョンのコンパイルに取り組んできました。MySQLclient-python が持つ libSystem.B.dylib 依存関係を理解しようとしているこの時点まで、私は完全に成功しています。
明確にするために、MySQLclient-python は MySQL C ライブラリの Python ラッパーです。このため、MySQLclient-python を使用する前にコンパイルする必要があります。これは現在 OS X 10.7 で作業しており、私の目標は、OS X の複数のバージョンで動作する MySQLclient-python のコンパイル済みバージョンを作成することです (libmysql のバンドルは既に処理されています)。現在、MySQLclient-python を完全に正常にコンパイルしており、10.7 で動作します。ただし、10.8+ でテストすると壊れます。MySQLclient-python をコンパイルするために、私は python 3.5 を使用して実行しています
python setup.py build
これにより、2 つのことが起こります。最初に、_mysql.o オブジェクト ファイルは、このようなコマンドを使用してコンパイルされます。次に、このスクリプトを使用して共有オブジェクト ファイルがコンパイルされます。明確にするために、これらのコマンドは主に setup.py によって生成されます。
結果のビルドには構造があります
.
├── setup.py
└── build
├── _mysql.so
├── MySQLdb
└── _mysql_exceptions.py
さて、走ると
$ otool -L _mysql.so
_mysql.so: /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
libSystem.B.dylib に依存していることを明確に示しています。現在、依存関係は一般的に問題ではなく、これは 10.7 で正常に動作します。Pythonモジュールをインポートして正しく使用できます。ただし、10.11 に切り替えると、この同じモジュールで次のエラーが発生します。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "./MySQLdb/__init__.py", line 19, in <module>
import _mysql
ImportError: dlopen(./_mysql.so, 2): Symbol not found: __ZNSt8ios_base4InitD1Ev
Referenced from: ./_mysql.so
Expected in: flat namespace in ./_mysql.so
明らかに、私の最初の考えは、依存関係に問題があるということです。それが問題だと思います。正直なところ、ここからどこへ行けばいいのかわかりません。明らかに、OS X は静的リンクを強く思いとどまらせます。もう一度明確にするために、私の目標はこれを複数の OS X プラットフォーム (10.7-10.11) で使用できるようにすることであり、これは現在 10.7 で動作します。何か案は?