2

そこで、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 で動作します。何か案は?

4

0 に答える 0