3

わかりました、私はこれのために 2 日間戦ってきました。それは通常、単純すぎて実現できないことを意味します。

ubuntuでクロスコンパイルする組み込みLinuxシステムがあります。Python をコンパイルするとき、コンパイルできなかったモジュールのリストに sqlite3 がありません。

ただし、_sqlite3.so ライブラリは、Python-2.6.6/build/lib.linux868-2.6/ の json.so や ctypes.so array.so などと同じ場所にはありません。

init-functions などを含む実際のモジュールは、Python-2.6.6/modules の適切な場所にあり、ターゲット システムでも見つけることができます。

so-file が見つからなかったので、arm-compiler を使用して共有ライブラリとして自分でコンパイルしてみました。これもうまくいきませんでした。

手動でコンパイルされた so-file を使用しない場合:

>>> import sqlite3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "rootfs/python/lib/python2.6/sqlite3/__init__.py", line 24, in <module>
  File "rootfs/python/lib/python2.6/sqlite3/dbapi2.py", line 27, in <module>
ImportError: /python/lib/python2.6/lib-dynload/_sqlite3.so: cannot open shared object file: No such file or directory

lib-dynloads にあるコンパイル済みの共有ライブラリを使用:

>>> import sqlite3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "rootfs/python/lib/python2.6/sqlite3/__init__.py", line 24, in <module>
  File "rootfs/python/lib/python2.6/sqlite3/dbapi2.py", line 27, in <module>
ImportError: dynamic module does not define init function (init_sqlite3)

編集:sqlite3用の適切なライブラリをコンパイルしたかどうか疑問に思っていました. 私が今理解している限り、_sqlite3.soはpythonビルダーが作成するものであり、libsqlite3.soはそれをビルドするために必要なライブラリですか? また、libsqlite3.so は Sqlite3 ソース コードからビルドされています。私はここで間違っていますか?

組み込みの Linux または Python の経験が豊富な人なら、ここで何が間違っているのか分かりますか?

4

2 に答える 2

1

わかりました、これを理解しました。どういうわけか、SOファイルを手動で正しくコンパイルしませんでした。このように動作するようになりました:

最初にsetup.pyから、sqlite3モジュールに対して有効な詳細デバッグを追加しました。これにより、問題を解決するプリントアウトが追加されました。

skipping incompatible /usr/lib/libsqlite3.so
cannot find -sqlite3

そのため、setup.pyは、アーキテクチャを完全に無視して、sqlite3という名前のモジュールを見つける最初のパスを選択したことに気付きました。setup.pyから他の検索パスを削除しましたが、ARMコンパイル済みライブラリを使用していたものが機能しました。_sqlite3.soは、他のすべてのモジュールとうまくコンパイルされました。

于 2012-09-19T05:28:01.170 に答える
1

最初にシステムに sqlite3 をコンパイルしてインストールし、後で python をコンパイルしてみてください。あるいは単に

easy_install pysqlite
于 2012-09-12T11:01:33.197 に答える