c++ - "लिंक R_X86_64_32S के खिलाफ" त्रुटि लिंकिंग




linux shared-libraries (2)

अपरिभाषित प्रतीक के खिलाफ R_X86_64_PC32 का स्थानांतरण, आमतौर पर तब होता है जब LDFLAGS को सख्त किया जाता है और CFLAGS नहीं।
शायद सिर्फ उपयोगकर्ता त्रुटि:
यदि आप लिंक समय पर -specs = / usr / lib / rpm / redhat / redhat-hardened-ld का उपयोग कर रहे हैं, तो आपको संकलन समय पर -pecs = / usr / lib / rpm / redhat / redhat-hardened-cc1 का उपयोग करने की आवश्यकता है , और जैसा कि आप एक ही समय में संकलन और लिंक कर रहे हैं, आपको या तो दोनों की आवश्यकता है, या -specs = / usr / lib / rpm / redhat / redhat-hardened-ld को छोड़ दें। सामान्य सुधार:
https://bugzilla.redhat.com/show_bug.cgi?id=1304277#c3
https://github.com/rpmfusion/lxdream/blob/master/lxdream-0.9.1-implicit.patch

मैं एक स्थिर लाइब्रेरी को एक साझा लाइब्रेरी से लिंक करने का प्रयास कर रहा हूं, मुझे निम्न त्रुटि हो रही है

/usr/bin/ld: ../../../libraries/log4cplus/liblog4cplus.a(fileappender.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC
../../../libraries/log4cplus/liblog4cplus.a: could not read symbols: Bad value
collect2: ld returned 1 exit status

लेकिन इसने 32 बिट मशीन पर बिना किसी त्रुटि के काम किया। मैंने -fPIC मैन्युअल रूप से The -fPIC झंडे जोड़ने की कोशिश की जो समस्या को हल नहीं करता है

मैंने -whole-archive फ़्लैग की कोशिश की जैसा कि here सुझाया गया here लेकिन कोई सफलता नहीं मिली।

 
/usr/bin/ld: ../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o): relocation R_X86_64_32S against `vtable for log4cplus::spi::AppenderAttachable' can not be used when making a shared object; recompile with -fPIC
../../../libraries/log4cplus/liblog4cplus.a(appenderattachableimpl.o): could not read symbols: Bad value
collect2: ld returned 1 exit status

Liblog4cplus.a का निर्माण:

  1. unzip log4cplus-1.1.0.zip
  2. ./configure --enable-static=yes --enable-threads=yes
  3. vi Makefile मेकफिल और जोड़ा -fPIC को CXXFLAGS और CFLAGS
  4. make

फिर मेरी साझा लाइब्रेरी को संकलित करने के लिए:

  1. g++ -frtti -w -c -fPIC -I"Include_Directory" myfile.cpp
  2. g++ -shared -fPIC -frtti -I"Include_Directory" -o mysofile.so myfile.o -Wl,--whole-archive "../../../libraries/log4cplus/liblog4cplus.a" -Wl,--no-whole-archive -ldl

एफसीएल स्थापित करते समय मुझे एक समान त्रुटि मिली है कि इस तरह सीसीडी लिबर (libccd) की आवश्यकता है:

/ usr / bin / ld: /usr/local/lib/libccd.a(ccd.o): एक साझा ऑब्जेक्ट बनाते समय 'स्थानीय प्रतीक' के विरुद्ध R_X86_64_32S का उपयोग नहीं किया जा सकता; -fPIC के साथ recompile

मुझे लगता है कि "libccd.a" नाम की दो अलग-अलग फाइलें हैं:

  1. /usr/local/lib/libccd.a
  2. /usr/local/lib/x86_64-linux-gnu/libccd.a

मैंने पहली फाइल को हटाकर समस्या हल की।