wie zu zwingen, Zusammenstellung von Boost zu verwenden -fPIC

Die Teams auf dem ich arbeite, erzeugt eine shared-library für die Verwendung in Python. Diese Bibliothek ist komplett in C++ und wir benutzen Boost zu setzen, um python. Da wir nicht garantieren können, dass unsere Kunden die Boost-Bibliotheken installiert, wir ziehen in die Funktionalität benötigt, die von Boost, um die shared-object-Datei statisch. Die Letzte Stufe in der Zusammenstellung bereits vertraut viele

g++ -o <output> <objects> -Wl,-Bstatic -lboost_python -lboost_regex ... -Wl,-Bdynamic -shared <other_opts>

Haben wir traditionell unsere eigenen bauen von Boost: 1.47. Diese version ist jetzt schon ziemlich alt und daher möchten wir aktualisieren. Aber, seltsam, wenn ich installieren Sie die erforderlichen Objekte mit yum auf meinem CentOS-7-system, bekomme ich die folgende Fehlermeldung vom gcc:

relocation R_X86_64_32 against '.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC

Gut, ich dachte, ich würde einfach laden Sie die neuesten boost (CentOS 7 installiert Boost 1.53) und mein eigenes zu bauen. Dies, nachdem alle, ist immer für uns gearbeitet. Ich Folge der Anleitung hier aber ich habe den gleichen Fehler. Wie kann ich erzwingen Sie die Verwendung von -fPIC, selbst für den statischen Bibliotheken, die es baut?

  • Sind Sie sicher, dass gcc (oder die ausführbare Datei zur Laufzeit) ist das finden der custom-built-Boost Bibliotheken? Sie können ändern Sie die Bibliothek durchsuchen von Verzeichnissen mit -L im gcc oder LD_LIBRARY_PATH zur Laufzeit.
  • Sie können direkten boost-build zu verwenden compiler-flags verwenden cxxflags="-fPIC". Es ist eine ähnliche variable mit dem Namen linkflags. Siehe boost-build-Dokumentation unter boost.org/build/doc/html/bbv2/overview/invocation.html
  • ja, ich bin sicher, dass meine Bibliotheken, die verwendet wurden, die von ld. Ich bin mit der option-L um ld zu erzwingen. Vielen Dank für diesen link. Der link, den ich verwendet wurde leider nicht erwähnt.
  • "Denn wir können nicht garantieren, dass unsere Kunden die Boost-Bibliotheken installiert" dies ist Sicherlich, warum wir veröffentlichen Abhängigkeiten? Nennen Sie in Ihrem U / MIN ist .spec-Datei?
  • Das ist genau das, was ich schließlich beschlossen, zu tun.
Schreibe einen Kommentar