kullanmaya zorlama Çalıştığım ekip, Python'da kullanılmak üzere paylaşılan bir kitaplık üretir. Bu kütüphane tamamen C++ ve python'a maruz kalmak için Boost kullanıyoruz. Müşterilerimizin Boost kütüphanelerinin kurulu olduğunu garanti edemediğimizden, Boost'tan gereken işlevselliği statik olarak paylaşılan nesne dosyasına çekiyoruz. 1.47: derleme son aşaması birçokBoost'un derlenmesini -fPIC
Biz geleneksel olarak Boost kendi yapı kullandımg++ -o <output> <objects> -Wl,-Bstatic -lboost_python -lboost_regex ... -Wl,-Bdynamic -shared <other_opts>
tanıdık gelecektir. Bu sürüm artık çok eski ve güncellemek istiyoruz. Benim CentOS üzerinde 7 sistemini yum kullanarak gerekli nesneleri yüklediğinizde, ancak garip bir şekilde, ben gcc aşağıdaki hatayı alıyorum:
relocation R_X86_64_32 against '.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
Eh, ben sadece son boost indirmek düşündüm (CentOS 7 Boost yükler 1.53) ve kendi yapmamı yap. Sonuçta, bu her zaman bizim için çalıştı. instructions here'u takip ediyorum ama aynı hatayı aldım. Oluşturduğu statik kütüphaneler için bile -fPIC kullanımını nasıl zorlayabilirim?
gcc (veya çalışma zamanında çalıştırılabilir) ısmarlama Boost kütüphaneleri bulmakta emin misiniz? Çalışma zamanında gcc veya 'LD_LIBRARY_PATH' içinde' -L' kullanarak kütüphane arama dizinlerini değiştirebilirsiniz. – NicholasM
"cxxflags =" - fPIC "' kullanarak derleme bayraklarını kullanmak için destek oluşturmayı doğrudan yapabilirsiniz. Linkflags adlı benzer bir değişken var. Http://www.boost.org/build/doc/html/bbv2/overview/invocation.html – NicholasM
@NicholasM adresindeki destek oluşturma belgelerine bakın. Bunu uygulamak için ld -L seçeneğini kullanıyorum. Bu bağlantı için çok teşekkür ederim. Kullandığım bağlantı bundan bahsetmedi. –