Zespół, w którym pracuję tworzy bibliotekę współdzieloną do użycia w Pythonie. Ta biblioteka jest w całości C++ i używamy Boost, aby eksponować na pythona. Ponieważ nie możemy zagwarantować, że nasi klienci mają zainstalowane biblioteki Boost, ściągamy funkcje wymagane od Boost do pliku obiektów wspólnych statycznie. Ostatni etap kompilacji będzie wyglądał znajomo dla wielu użytkowników. Ta wersja jest teraz dość stara i dlatego chcemy ją zaktualizować. Jednak dziwnie, kiedy zainstalować niezbędne obiekty przy użyciu yum na moich CentOS System 7, pojawia się następujący komunikat o błędzie z gcc:jak zmusić kompilację Boost do użycia -fPIC
relocation R_X86_64_32 against '.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
Cóż, myślałem, że po prostu pobrać najnowszą impuls (CentOS 7 instaluje Rozreklamują 1.53) i wykonaj moją własną kompilację. To zresztą zawsze działało dla nas. Postępuję zgodnie z instructions here, ale mam ten sam błąd. Jak wymusić użycie opcji -fPIC nawet w statycznych bibliotekach, które on tworzy?
Czy jesteś pewien, że gcc (lub plik wykonywalny przy starcie) jest znalezienie niestandardowych zbudowany bibliotek motywujące? Możesz modyfikować katalogi wyszukiwania biblioteki za pomocą '-L' w gcc lub' LD_LIBRARY_PATH' w środowisku wykonawczym. – NicholasM
Możesz sterować zwiększeniem, aby użyć flag kompilatora używając 'cxxflags =" - fPIC "'. Istnieje podobna zmienna o nazwie 'linkflags'. Zobacz dokumentację boost build na http://www.boost.org/build/doc/html/bbv2/overview/invocation.html – NicholasM
@NicholasM tak, jestem pewien, że moje biblioteki były używane przez ld. Używam opcji -L na ld, aby wymusić to. Dziękuję bardzo za ten link. Link, którego używałem, nie wspomniał o tym. –