web-dev-qa-db-ja.com

Pythonの静的バージョンを構築していますか?

StackOverflowで この質問をする を試しましたが、その後の沈黙のために、Ubuntu固有の専門知識がさらに必要かどうか疑問に思いました。

私はこうしてPythonの静的バージョンを構築しようとしています:

./configure --disable-shared LDFLAGS="-static -static-libgcc" CPPFLAGS="-static"

ただし、上記のように構成されたmakeを実行すると、最終的に警告とエラーが発生します。

gcc -pthread -static -static-libgcc -Xlinker -export-dynamic -o python \
            Modules/python.o \
            libpython2.7.a -lpthread -ldl  -lutil   -lm  
<SNIP>
libpython2.7.a(posixmodule.o): In function `posix_initgroups':
Python-2.7.2/./Modules/posixmodule.c:3981: warning: Using 'initgroups' in
statically linked applications requires at runtime the shared
libraries from the glibc version used for linking

/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in
`/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/../../../libc.a(strcmp.o)'
can not be used when making an executable;
recompile with -fPIE and relink with -pie

collect2: ld returned 1 exit status

立ち往生しています。 libcの再コンパイルを求めているようです。 -static-libgccで十分だと思いましたが、明らかにそうではありません。 libcのリンクに問題があるかどうか、またはコンパイルフラグに問題があるかどうかはわかりません。これにより、続行が困難になります。誰もがここで何が起こっているのか、そしてUbuntu 11.04で静的pythonを構築するという私の目標を達成する方法を知っていますか?

6
Adoring Gumdrop

pythonバイナリをビルドするには、ステップ(上記のエラー)の後に手動で実行できます

gcc -pthread -static -static-libgcc  -o python Modules/python.o libpython3.2m.a -lpthread -ldl  -lutil   -lm

違いは-Xlinker -export-dynamicが削除されることです。

しかし、実際に使用するためにそのバイナリをテストしませんでした(実行して実行するだけです)。

5
sio4

実際の静的ビルドを使用する場合は、別のCライブラリを使用する必要があります。

Glibcはトリックを行いません。静的にリンクする場合は、*。aバージョンのeverythingを探し出す必要があります。ランタイムおよびそれらをallアプリケーションに入れます。環境が変化すると、アプリケーションが壊れます。通常、動的ライブラリはそれを処理するため、優先されます。

私の知る限り、解決策はありません。

0
Bruno Pereira