comment faire pour forcer la compilation de Boost à utiliser-fPIC

L'équipe sur laquelle je travail produit une bibliothèque partagée pour une utilisation en Python. Cette bibliothèque est entièrement en C++ et nous utiliser Boost exposer à python. Parce que nous ne pouvons pas garantir que nos clients ont les bibliothèques Boost installé, nous tirons la fonctionnalité nécessaire de Stimuler le fichier objet partagé de manière statique. La dernière étape de compilation doit vous paraître familier à de nombreux

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

Nous avons traditionnellement utilisé notre propre compilation de Boost: 1.47. Cette version est maintenant assez vieux et donc, nous souhaitons mettre à jour. Cependant, curieusement, lorsque j'installe les objets nécessaires à l'aide de yum sur mon CentOS 7, j'obtiens l'erreur suivante à partir de gcc:

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

Bien, je pensais que je serais tout simplement de télécharger la dernière boost (CentOS 7 installe Boost 1,53) et faire ma propre construction. Ceci, après tout, a toujours travaillé pour nous. J'ai suivi les les instructions ici, mais j'ai eu la même erreur. Comment puis-je forcer l'utilisation d'-fPIC, même pour les bibliothèques statiques qu'il construit?

  • Êtes-vous sûr que gcc (ou l'exécutable au moment de l'exécution) est de trouver le custom-built bibliothèques Boost? Vous pouvez modifier la bibliothèque de recherche de répertoires à l'aide de -L dans gcc ou LD_LIBRARY_PATH au moment de l'exécution.
  • Vous pouvez renforcer directement la construction afin d'utiliser les drapeaux de compilation à l'aide de cxxflags="-fPIC". Il est similaire variable nommée linkflags. Voir stimuler la génération de la documentation à l'adresse boost.org/build/doc/html/bbv2/overview/invocation.html
  • oui, je suis sûr que mes bibliothèques ont été utilisés par ld. Je suis à l'aide de l'option-L ld pour respecter cela. Merci beaucoup pour ce lien. Le lien que j'ai été en utilisant n'ai pas le mentionner.
  • "Parce que nous ne pouvons pas garantir que nos clients ont les bibliothèques Boost installé" Sûrement, c'est pourquoi nous publions des dépendances? Nom dans votre TR / min .le fichier de spécification?
  • C'est précisément ce que j'ai finalement décidé de le faire.