2013-06-07 7 views
13

Wenn ich versuche, meine eigene Version von Python zu bauen mit:Wie lokale Python zu ignorieren, wenn Python Sourcen

./configure --enable-shared --prefix=/app/vendor/python-dev && make && make install 

ich einige Fehler bei der Installation finden Sie unter:

/usr/bin/ld: /usr/local/lib/libpython2.7.a(abstract.o): Umzug R_X86_64_32 gegen `.rodata.str1.8 'kann nicht verwendet werden, wenn ein gemeinsames Objekt gemacht wird; neu kompilieren mit -fPIC /usr/local/lib/libpython2.7.a: konnte keine Symbole lesen: Bad Wert

Das Problem beginnt, wenn der Linker die neu kompilierte Bibliothek zu verwenden /usr/local/lib/libpython2.7.a und nicht versucht.

Wie kann ich verhindern, dass der Linker (configure/make) die Python-Bibliotheken verwendet, die auf dem System installiert sind?

+0

'configure --enable-shared prefix =/app/vendor/python-dev && make && make install' funktioniert für mich (aus dem [Python-2.7.5-Tarball] (http://www.python.org/ftp/python/2.7.5/Python-2.7 .5.tar.bz2) auf Ubuntu 13.04). Wenn der Fehler während des 'make'-Teils auftritt, müssen Sie die volle Ausgabe von' make' hinzufügen. – Aya

+0

Dies ist der einzige Fehler. Es wiederholt sich einfach auch für andere Module. Ich benutze 2.7.4 Tarball. Aber ich habe 2.7.4 auf meinem Rechner, statisch kompiliert (ich denke ohne -fPIC). – Xyand

+0

Sicher, aber der Grund für den Fehler wird viel früher im Build aufgetreten sein, so dass es unmöglich ist, ohne weitere Informationen zu diagnostizieren. Sehen Sie sich [this] (http://mail.python.org/pipermail/python-list/2010-September/587427.html) und die Folgen an. Ich bin mir nicht sicher, ob es das gleiche Problem ist, aber ich kann nicht viel mehr tun, ohne die Ausgabe von 'make' zu ​​sehen. – Aya

Antwort

12

Das sieht ein misfeature des setup.py Skript immer /usr/local Pfad in der Suche mit sein, wenn das Ziel makesharedmods aufbaut.

Sie werden von Hand müssen die setup.py frob, so das tun ...

./configure --enable-shared --prefix=/app/vendor/python-dev 

... zuerst, dann bearbeiten setup.py finden Linien 442, 443 und 444, die wie folgt aussehen sollte. ..

if not cross_compiling: 
    add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') 
    add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') 

... und kommentieren sie aus, damit sie so aussehen ...

# if not cross_compiling 
    # add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') 
    # add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') 

... dann sollte die make funktionieren.

+2

Die if-Anweisung muss ebenfalls auskommentiert werden. Andernfalls würde der Parser einen eingerückten Block erwarten, bei dem es sich um die beiden add_dir_to_list-Zeilen handelt. Nur für zukünftige Referenz. – Xephon

+0

Ich habe gerade dieses Problem bei der Neukompilierung von Python und der erneuten Installation von/usr/local/lib. In diesem Fall müssen Sie --prefix =/usr/local/lib erneut verwenden und setup.py bearbeiten, da diese Antwort nicht hilft.Um es zu beheben, musste ich die vorhandene Datei /usr/local/lib/libpython2.7.a und /usr/local/lib/python2.7/ löschen (vielleicht wird letztere nicht benötigt) – user920391

4

ich mit this script gelöst:

# Python 2.7.6: 
wget http://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xz 
tar xf Python-2.7.6.tar.xz 
cd Python-2.7.6 
./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared  LDFLAGS="-Wl,-rpath /usr/local/lib" 
make && make altinstall 
0

Ich zog /usr/local/lib/libpython2.7.a/tmp

Verwandte Themen