Wie kann ich ccshared = -fpic während der Ausführung setzen ./Configure?
Frage
Ich versuche Python 2.6 für bauen Qgis an Rhel 5. Während der Herstellung von QGIS erhalte ich den folgenden Fehler:
Linking CXX shared library libqgispython.so
/usr/bin/ld: /usr/local/lib/python2.6/config/libpython2.6.a(abstract.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/python2.6/config/libpython2.6.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [src/python/libqgispython.so.1.0] Error 1
make[1]: *** [src/python/CMakeFiles/qgispython.dir/all] Error 2
make: *** [all] Error 2
Was ich aus diesem Fehler heraus finde, ist, dass ich Python 2.6 mit etwas Flagge erstellen muss, -fPIC
. Ok, also habe ich es in der gefunden configure.in
Datei, aber es überprüft mehrere Bedingungen und auf der Grundlage der von ihnen zugewiesenen Bedingungen -fPIC
zum CCSHARED
Flagge.
Was ich tat, war, dass ich nach allen Bedingungen überprüft worden war, dass ich die folgende Zeile hinzugefügt habe, um absichtlich zu verwenden CCSHARED
wie -fPIC
.
CCSHARED="-fPIC";
Aber es hat nicht funktioniert..
So geben Sie beim Konfigurieren fest, dass ich festlegen möchte CCSHARED
wie -fPIC
?
Lösung
Ausführen konfigurieren mit --enable-shared
. Dann -fPIC
wird als Teil der gemeinsam genutzten Flaggen aufgenommen.
Andere Tipps
Das Folgende funktionierte für mich, als ich auf diesen Fehler stieß:
make clean
./configure CFLAGS=-fPIC CXXFLAGS=-fPIC
Ich habe es zum Laufen gebracht, indem ich hinzugefügt wird -fPIC
nach CC= gcc -pthread
, dh CC= gcc -pthread -fPIC
im Makefile.
- Laufen
./configure --help
, möglicherweise zu grep pic, um festzustellen, ob es eine Option gibt, um dies zu aktivieren - Versuchen Sie, die Umgebungsvariable vor dem Ausführen von Konfiguration festzulegen, z. B. ccshared = "-fpic" ./configure (als einzelner Befehl unter Annahme von Bash)
Wenn keiner dieser Funktionen funktionieren, müssen Sie den Konfigurationscode lesen und die Bedingungen verstehen, die es besser testet.
Wie an anderer Stelle erwähnt, sollte das Ausführen von Konfigurieren mit -ABABLE -SHARDE -FPIC in den Compiler -Flags dazu führen. Möglicherweise sehen Sie jedoch immer noch, dass der Fehler "Symbole nicht lesen konnten", wenn Sie versuchen, einen parallele Build mithilfe von "make -j8" durchzuführen. Ich hatte den gleichen Fehler bei RHEL 5.2 und es ging nur weg, als ich das '-J8' von meiner Make-Berufung entfernte ...
Ist das nicht? CCFLAGS
? (Ich war eine Weile nicht diese Seite der Welt.)
OpenSSL mit ./config -prefix =/Software/Bea/OpenSSL/100C -openenssldir =/Software/Bea/OpenSSL/100C/SSL Shared -fpic bauen
Und dann funktioniert es auch nicht. Es gab/usr/bin/ld: Links sind fehlgeschlagen. Das Wir modifizierte das Verknüpfungsteil in der Datei make -Datei zuvor gcc -wall -shared -o pwutil.so asciihex.o Basis64.o bitutils.o dict.o gen_rand.o key_Schedule.o md5c.o pdg2_ecb.o pwutils.o random_dataa .o hexutils.o des3crypt.o blowcrypt.o /software/bea/opensl/1.0.0c/lib/libcrypto.a
Wir haben libcrypto.a in libcrypto geändert.
GCC -Wall -shared -o pwutil.so asciihex.o base64.o bitutils.o dict.o gen_rand.o key_schspledule.o md5c.o pdg2_ecb.o pwutils.o random_data.o hexutils.o Des3crypt.o blowcrypt.o / Software/Bea/OpenSSL/1.0.0c/lib/libcrypto.so
und es hat funktioniert
Folgendes hat eine Beispiel von FPIC zu konfigurieren