5

管理者権限なしで、ソース コードから直接 Python をビルドしようとしています。

export CPPFLAGS='-I/opt/sqlite-3.7.16.2/include -I/opt/tk8.6.0/include
-I/opt/tcl8.6.0/include/'

export LDFLAGS='-L/opt/sqlite-3.7.16.2/lib -L/opt/tk8.6.0/lib/
-L/opt/tcl8.6.0/lib/ ./configure --prefix=/path_to_python-2.7. 4 --enable-shared'

その後

make

私は以下を取得します:

「_tkinter」拡張機能の構築

gcc -pthread -fPIC -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DWITH_APPINIT=1 -I/usr/X11/include -I. -IInclude -I./Include -I/opt/sqlite/sqlite-3.7.16.2/include -I/opt/tk8.6.0/include -I/opt/tcl8.6.0/include -I/usr/local/include - I/opt/python/src/Python-2.7.4/Include -I/opt/python/src/Python-2.7.4 -c /opt/python/src/Python-2.7.4/Modules/_tkinter.c - o build/temp.linux-x86_64-2.7/opt/python/src/Python-2.7.4/Modules/_tkinter.o

gcc -pthread -fPIC -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -DWITH_APPINIT=1 -I/usr/X11/include -I. -IInclude -I./Include -I/opt/sqlite/sqlite-3.7.16.2/include -I/opt/tk8.6.0/include -I/opt/tcl8.6.0/include -I/usr/local/include - I/opt/python/src/Python-2.7.4/Include -I/opt/python/src/Python-2.7.4 -c /opt/python/src/Python-2.7.4/Modules/tkappinit.c - o build/temp.linux-x86_64-2.7/opt/python/src/Python-2.7.4/Modules/tkappinit.o

gcc -pthread -shared -L/opt/sqlite/sqlite-3.7.16.2/lib -L/opt/tk8.6.0/lib/ -L/opt/tcl8.6.0/lib/ -L/opt/sqlite/sqlite- 3.7.16.2/lib -L/opt/tk8.6.0/lib/ -L/opt/tcl8.6.0/lib/ -I. -IInclude -I./Include -I/opt/sqlite/sqlite-3.7.16.2/include -I/opt/tk8.6.0/include -I/opt/tcl8.6.0/include build/temp.linux-x86_64-2.7 /opt/python/src/Python-2.7.4/Modules/_tkinter.o build/temp.linux-x86_64-2.7/opt/python/src/Python-2.7.4/Modules/tkappinit.o -L/usr/ X11/lib -L/opt/sqlite/sqlite-3.7.16.2/lib -L/opt/tk8.6.0/lib/ -L/opt/tcl8.6.0/lib/ -L/usr/local/lib -L. -ltk8.6 -ltcl8.6 -lX11 -lpython2.7 -o build/lib.linux-x86_64-2.7/_tkinter.so

*警告: インポートに失敗したため、「_tkinter」の名前を変更しています: libtk8.6.so: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません

奇妙なことは、私が見ることができるということlibtk8.6.soです。/opt/tcl8.6.0/libで指定したように、実際にはすぐ下にありますLDFLAGS

なぜそのコンパイルは失敗したのですか?

4

1 に答える 1

6

この問題は、 のインストール中setup.pyに、Python が をインポートしようとしたときに発生します_tkinter。function を見ると、次のようなbuild_extensionブロックがあります。

imp.load_dynamic(ext.name, ext_filename)

_tkinter この行は(動的共有ライブラリを使用する)の動的ロードを試みlibtk8.6.soます。したがって、コンパイル/リンクが機能したとしても、Python がモジュールをテストするとき、動的ライブラリが使用され、tcl/lib も tk/lib もありませんでしたLD_LIBRARY_PATH。これらを追加すると、すべて正常に機能しました。

要約すると、次のインクルードパスを追加する必要がありましたCPPFLAGS

  • /path_to/sqlite3/include
  • /path_to/tcl/include
  • /path_to/tk/include

次の lib パスLDFLAGS

  • /path_to/sqlite3/lib
  • /path_to/tcl/lib
  • /path_to/tk/lib

および を介した次の lib パスLD_LIBRARY_PATH:

  • /path_to/sqlite3/lib
  • /path_to/tcl/lib
  • /path_to/tk/lib

このすべてで、すべてが機能しました。

于 2013-04-18T18:00:08.790 に答える