2016-06-19 13 views
3

Ich konnte erfolgreich Cython auf Ubuntu 14.04 aus der Quelle erstellen, wie in dieser SE Frage/Antwort Compiling cython From source with icc erklärt, und ich habe den Quellcode von hier heruntergeladen - Cython source code download.Wie python disttips Gcc-Linker mit ICC zu überschreiben?

Der Befehl cython zu kompilieren ist

CC = icc LINKCC = icc python3.4

bauen setup.py ich das Buildprotokoll am umschließt. Es ist STILL mit gcc für die Verknüpfung. Hier ist ein Beispiel für das Erstellungsprotokoll.

Es erscheint CC = icc LINKCC = icc tut NICHT scheinen den Linker zu ICC zu ändern. Es verwendet immer noch x86_64-linux-gnu-gcc. Wenn ich die Umgebungsvariable LDFLAGS = -lirc einstelle, wird die Umgebungsvariable an gcc und nicht an icc übergeben. Auch wenn ich Druckanweisungen in BuildExecutable.py setze, werden sie nicht angerufen.

icc -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.4m -c /home/aswin/libPython/Cython-0.24/Cython/Plex/Scanners.c -o build/temp.linux-x86_64-3.4/home/aswin/libPython/Cython-0.24/Cython/Plex/Scanners.o 
icc: command line warning #10006: ignoring unknown option '-fwrapv' 
creating build/lib.linux-x86_64-3.4 
creating build/lib.linux-x86_64-3.4/Cython 
creating build/lib.linux-x86_64-3.4/Cython/Plex 
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -lirc -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.4/home/aswin/libPython/Cython-0.24/Cython/Plex/Scanners.o -o build/lib.linux-x86_64-3.4/Cython/Plex/Scanners.cpython-34m.so 

Wie kann ich es beheben?

Antwort

4

Sie benötigen den Linker

indem Export LDSHARED = "icc -shared" außer Kraft zu setzen. Das erzeugt den Icc-Linker. Hier ist ein Beispiel für das Buildprotokoll, indem Sie

CC = icc python3.4 setup.py build_ext

Alternativ können Sie auch das gleiche tun, indem

eingeben

LDSHARED = "icc -shared" CC = icc python3.4 setup.py build_ex

icc -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.4m -c /home/a/libPython/Cython-0.24/Cython/Plex/Scanners.c -o build/temp.linux-x86_64-3.4/home/a/libPython/Cython-0.24/Cython/Plex/Scanners.o 
icc: command line warning #10006: ignoring unknown option '-fwrapv' 
creating build/lib.linux-x86_64-3.4 
creating build/lib.linux-x86_64-3.4/Cython 
creating build/lib.linux-x86_64-3.4/Cython/Plex 
icc -shared -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.4/home/a/libPython/Cython-0.24/Cython/Plex/Scanners.o -o build/lib.linux-x86_64-3.4/Cython/Plex/Scanners.cpython-34m.so 
cythoning /home/a/libPython/Cython-0.24/Cython/Plex/Actions.py to /home/a/libPython/Cython-0.24/Cython/Plex/Actions.c 
+0

gansub genannt, hast du 'LDSHARED =" icc -shared "' Umgebungsvariable gesetzt? Wie? Als 'LDSHARED =" icc -shared "CC = icc python3.4 setup.py build_ext'? – osgx

+0

Können Sie diesen Befehl zu Ihrer Antwort hinzufügen? Es kann auch eingestellt werden, indem man es vor dem Befehl LDSHARED = etw. Hinzufügt (um die Antwort für zukünftige Besucher noch nützlicher und klarer zu machen) – osgx

+0

gansub, ist es nicht verlinkt oder nicht gefunden? Kannst du ldd auf einer Bibliothek/ausführbaren Datei mit dem Problem ausführen? Wenn es verlinkt ist, aber nicht gefunden wurde, können Sie den Pfad der lib zu /etc/ld.so.conf oder zu LD_LIBRARY_PATH oder zu [rpath option] (https://en.wikipedia.org/wiki/Rpath) hinzufügen Verknüpfungsschritt (der "icc -shared" ist, fügen Sie die Optionen hinzu) – osgx

0

Sie könnten versuchen, die Verknüpfungsoptionen -static-intel hinzuzufügen, sodass alle Intel-spezifischen Funktionen statisch verknüpft sind.

+0

Ich habe den Code Link in Ihrer vorherigen Frage gelesen. LDFLAS ist möglicherweise nicht der richtige. aber Sie könnten überprüfen, ob es etwas Nützliches von 'python setup.py --help build_ext' ist. – kangshiyin

+0

Ich habe diesen Befehl ausgeführt und ich sehe Erweiterungen für Compiler wie --compiler, aber sehe keinen zum Verknüpfen – gansub

+0

Ich setze print Anweisungen in diese Datei https://github.com/cython/cython/blob/master/Cython/Build/BuildExecutable.py, aber das wird NICHT – gansub