/ / विधानसभा से x86-64 ऑब्जेक्ट से साझा लाइब्रेरी को PIC के कारण लिंक नहीं किया जा सकता है - लिंकर, 64 बिट, x86-64, nasm, ld

पीआईसी - लिंकर, 64 बिट, x86-64, nasm, ld की वजह से एक साझा लाइब्रेरी को x86-64 ऑब्जेक्ट से असेंबली से लिंक नहीं कर सकता

मैं 32-बिट से एक साझा लाइब्रेरी पोर्ट कर रहा हूं64-बिट। यह कुछ असेंबली (NASM के लिए लिखित) से बना है जो कई प्रक्रियाओं और उच्च स्तर के सी ग्लू कोड का निर्यात करता है। मैं "NASM 2.10.01 और GNU ld 2.22 के साथ 64-बिट डेबियन मशीन का निर्माण कर रहा हूं।

सभी पुश / पॉप मुद्दों (पुश करने) को निर्धारित किया गया हैरजिस्टरों के 32-बिट भागों ने स्पष्ट रूप से "64-बिट मोड में टी काम) जीता, मुझे" इकट्ठा करने के लिए वस्तु मिली, लेकिन अब मैं लिंकिंग चरण द्वारा रोक दिया गया हूं। यहां मेरी कमांड लाइनें हैं - विधानसभा:

nasm -Ox -dPTC_ARCH=X64 -f elf64 particl.asm -o particlasm.o

लिंक करना:

ld -shared -lc -S -melf_x86_64 particlasm.o ptc_highlevel.o -o libparticlasm.so (-lc स्विच मानक C लाइब्रेरी को जोड़ने में लागू करता है - मुझे विधानसभा कोड में इसके कुछ कार्यों की आवश्यकता है)

हालाँकि, लिंकर निम्न संदेश के साथ विफल रहता है:

ld: particlasm.o: relocation R_X86_64_32 against `.text" can not be used when making a shared object; recompile with -fPIC
particlasm.o: could not read symbols: Bad value`

मुझे 64-बिट सिस्टम पर PIC की आवश्यकता क्यों है के बारे में पता है, बात यह है कि, मैं वास्तव में PIC का उपयोग कर रहा हूँ जैसा कि धारा 9.2 में वर्णित है NASM मैनुअल। हालाँकि, यह मुझे प्रतीत होता है कि NASM किसी तरह हैमेरे कोड को ELF प्रतीक तालिका में PIC के रूप में चिह्नित नहीं किया गया है, जो लिंकर के विरोध का कारण बनता है, और मुझे कोई संबंधित कमांड-लाइन स्विच या निर्देश नहीं मिल सकते हैं इसे ठीक करने के लिए मैनुअल।

कोई विचार?

उत्तर:

जवाब के लिए 2 № 1

मैंने इसे हल कर दिया है! मेरे मामले में स्थानांतरित होने के परिणामस्वरूप:

1) libc कॉल, जिसे मैंने जोड़कर हल किया wrt ..plt सेवा मेरे libc कॉल, उदा। call rand wrt ..plt,

2) कोड के भीतर रखे गए स्थिरांक के संदर्भ, जिन्हें ई.जी. से बदलने की आवश्यकता थी। push MASK_RGB सेवा मेरे push ptr [rel MASK_RGB] (कहा पे ptr मेरा अपना प्रकार है जो दिए गए प्लेटफ़ॉर्म के लिए मूल शब्द प्रकार के लिए उपनाम है)।