So kompilieren Sie eine statische Bibliothek mit -fPIC aus boost.python

So kompilieren Sie eine statische Bibliothek mit -fPIC aus boost.python


Standardmäßig libboostpython.a wird ohne -fPIC kompiliert . Aber ich muss eine Python-Erweiterung machen und es ist eine dynamische Bibliothek mit -fPIC die auf statische Bibliotheken verweist.
Wie kann ich eine statische Bibliothek kompilieren (libboostpython.a ) mit -fPIC ab boost.python ?


Antworten:


Es gibt ein paar Optionen, die Sie verwenden könnten:



  • Boost aus dem Quellcode kompilieren und zusätzliche Compiler-Optionen an bjam übergeben. Z.B. bjam ... cxxflags='-fPIC' . Das würde jede Boost-Quelldatei als positionsunabhängigen Code kompilieren.

  • Verwenden Sie Boost in Form von gemeinsam genutzten Bibliotheken. In diesem Fall möchten Sie wahrscheinlich gemeinsam genutzte Boost-Bibliotheken zusammen mit Ihrer Anwendung versenden, um sicherzustellen, dass die richtige Version von Boost verwendet wird. Sie können Ihre ausführbare Datei mit '-Wl,-rpath,$ORIGIN' verknüpfen -Flag, sodass der dynamische Linker, wenn er nach gemeinsam genutzten Bibliotheken sucht, die von Ihrer ausführbaren Datei benötigt werden, in dem Verzeichnis nach ihnen sucht, in dem sich die ausführbare Datei befindet. Siehe man ld.so für weitere Details zu $ORIGIN .


Einige Code-Antworten


./bjam clean &&
./bjam -d+2 link=static cxxflags="-fPIC" install