كيف يمكنني ضبط ccshared = -fpic أثناء التنفيذ ./configure؟

StackOverflow https://stackoverflow.com/questions/629961

  •  08-07-2019
  •  | 
  •  

سؤال

أحاول بناء بيثون 2.6 QGIS على ريل 5. أثناء صنع QGIS أحصل على الخطأ التالي:

Linking CXX shared library libqgispython.so
/usr/bin/ld: /usr/local/lib/python2.6/config/libpython2.6.a(abstract.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/python2.6/config/libpython2.6.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [src/python/libqgispython.so.1.0] Error 1
make[1]: *** [src/python/CMakeFiles/qgispython.dir/all] Error 2
make: *** [all] Error 2

ما اكتشفته من هذا الخطأ هو أنني بحاجة إلى بناء Python 2.6 مع بعض العلم ، -fPIC. حسنًا ، لقد وجدته في configure.in ملف لكنه يتحقق من عدة شروط وعلى أساس تلك الشروط التي يعينها -fPIC إلى CCSHARED علَم.

ما فعلته هو أنه بعد فحص جميع الظروف ، أضفت السطر التالي لاستخدامه عمدا CCSHARED كما -fPIC.

CCSHARED="-fPIC";

ولكنها لم تعمل..

كيفية تحديد أثناء تكوين ما أريد ضبطه CCSHARED كما -fPIC?

هل كانت مفيدة؟

المحلول

تشغيل التكوين مع --enable-shared. ثم -fPIC سيتم تضمينها كجزء من الأعلام المشتركة.

نصائح أخرى

ما يلي عمل بالنسبة لي عندما واجهت هذا الخطأ:

make clean
./configure CFLAGS=-fPIC CXXFLAGS=-fPIC

لقد حصلت عليها من خلال الإضافة -fPIC بعد، بعدما CC= gcc -pthread, ، بمعنى آخر CC= gcc -pthread -fPIC في Makefile.

  1. يجري ./configure --help, ، ربما الأنابيب إلى grep pic ، لمعرفة ما إذا كان هناك خيار لتمكين هذا
  2. حاول تعيين متغير البيئة قبل تشغيل التكوين ، على سبيل المثال ccshared = "-fpic" ./Configure (كأمر واحد ، على افتراض bash)

إذا لم يكن أي من هذه الأعمال ، فأنت بحاجة إلى قراءة رمز تكوين وفهم الشروط التي يختبرها بشكل أفضل.

كما هو مذكور في مكان آخر ، يجب أن يتسبب تشغيل التكوين باستخدام -المشتركة القابلة للتنفيذ -في إدراجها في أعلام التحويل البرمجي. ومع ذلك ، لا يزال بإمكانك رؤية خطأ "لا يمكن قراءة الرموز" إذا حاولت القيام ببناء متوازي باستخدام ، على سبيل المثال ، "Make -J8". كان لدي هذا الخطأ نفسه في RHEL 5.2 وذهب بعيدًا فقط عندما أزلت "-J8" من استدعاء Make ...

أليس هذا CCFLAGS؟ (لم يكن هذا الجانب من العالم لفترة من الوقت.)

أعيد بناء OpenSSL باستخدام ./config -prefix =/software/bea/openssl/100c -openssldir =/software/bea/openssl/100c/ssl مشترك

ثم أيضا العمل. أعطى/usr/bin/ld: فشل الروابط. قمنا بتعديل الجزء الرابط في ملف Make سابقًا ، كان GCC -wall -sare -o -o pwutil.so asciihex.o base64.o bitutils.o dict.o gen_rand.o key_schedule.o md5c.o pdg2_ecb.o pwutils.o random_data .o hexutils.o des3crypt.o blowcrypt.o /software/bea/openssl/1.0.0c/lib/libcrypto.a

قمنا بتغيير libcrypto.a إلى libcrypto.so بعد إعادة البناء مع خيار مشترك و - fpic

gcc -wall -sared -o pwutil.so asciihex.o base64.o bitutils.o dict.o gen_rand.o key_schedule.o md5c.o pdg2_ecb.o pwutils.o random_data.o hexutils.o des3crypt.o blowcrypt.o / البرمجيات/BEA/OPENSSL/1.0.0C/LIB/LIBCRYPTO.SO

وعملت

فيما يلي مثال من تمرير FPIC لتكوين

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top