unix - ld can't find lib to link -


मेरी समस्या का वर्णन करने के लिए निम्न उदाहरण है:

  ld -Lpath1 -Lpath2 - LA -lB -Xlinker -T-Xlinker \ -W1, -rpath, / usr / local / lib -lo लक्ष्य ld: नहीं मिल सकता है -lA collect2: ld 2 बाहर निकलें स्थिति  

दोनों पथ 1 और पथ 2 सापेक्ष पथ हैं, और मैं पुस्तकालय ए को एलडी के पीडब्ल्यूडी के अनुसार पा सकते हैं, तो एलडी आउटपुट को इस त्रुटि संदेश क्यों मिला?

क्या कोई मुझे इस समस्या को डिबग करने के लिए कुछ सुझाव दे सकता है?

मुझे कुछ याद आती है, आरटी के नाम से एक लाइब्रेरी के पहले एक '' स्टेटिक '' है।

आपके सुझाव के रूप में, मैं जीसीसी को लिंकिंग प्रक्रिया करने के लिए एलडी को चलाने की कोशिश करता हूं। जीसीसी एओ बो -एमबी = 64 -स्टीटिक- lrt -Xlinker -T -Xlinker ld.script -W1, -rpath, / usr / local / lib -lmemdbg -o लक्ष्य यह काम नहीं करता है।

जीसीसी एओ बो -एमबी = 64 और फिर मैं "-स्टीटिक" विकल्प को हटा देता हूं, और अन्य गतिशील लिपि- lpthread के बाद (क्योंकि आरटी पथ्रेड पर निर्भर करता है जो कि "-सैतिक" को निकाल देता है)। -lrt -lpthread -Xlinker -T -Xlinker ld.script -W1, -rpath, / usr / local / lib -lmemdbg -o लक्ष्य और इस समय, वस्तुओं को एक साथ सफलतापूर्वक लिंक किया गया है।

और फिर मैं यह समझने की कोशिश करता हूं कि "-static" कमांड जीसीसी को "-वी" से गुजरने के कारण काम नहीं करता है कुछ "-एल" विकल्प दिखाई देते हैं, और खोज सूची में librt.a नामक एक lib प्राप्त करते हैं।

मैं वास्तव में उलझन में है। जीसीसी का संस्करण 4.3 है

ऐसे कई मुद्दे हैं जो कारक हो सकते हैं:

  • आप किस नाम की तलाश कर रहे हैं? path1 / libA.a ? path1 / libA.so ?
  • -W1 विकल्प शायद -Wl होना चाहिए, लेकिन वह इसके लिए खाता नहीं होगा लिंक त्रुटि।
  • -lo विकल्प को शायद -l विकल्प के लिए एक तर्क के साथ दो विकल्प हो सकते हैं (जब तक कि आपके पास कोई लायब्रेरी नहीं है < कोड> लिब-ओआ या lib-o.so )।
  • आप सामान्य रूप से अपने खुद के कम से कम एक वस्तु फाइल को निर्दिष्ट करते हैं; केवल लेक्स / वाईएसी पुस्तकालय (जो मुझे पता है) आपके लिए एक main () प्रदान करते हैं - केवल क्लासिक यूनिक्स और लिनक्स सिस्टम पर ही नहीं।
  • अगर पुस्तकालय फाइल मौजूद है जहां आपको लगता है कि वे करते हैं, क्या वे सही प्रकार हैं? यही है, यदि आप 32-बिट प्रोग्राम का निर्माण कर रहे हैं, तो क्या वे 64-बिट लाइब्रेरी हो सकती हैं - या इसके विपरीत? क्या वे आपके हार्डवेयर के लिए हैं? (आम तौर पर, मैं लिंकर से अपेक्षा करता हूं कि 'नहीं मिल सकता' की अपेक्षा अधिक उपयुक्त है, लेकिन यह एक समस्या हो सकती है।)
  • क्या आपने पुस्तकालय फाइलों और निर्देशिकाओं पर अनुमतियों की जांच की है?
  • क्या आप लोडर को प्रत्यक्ष रूप से लागू नहीं करना चाहते हैं, लेकिन क्या आपके लिए लोडर को लागू करने के लिए कंपाइलर का उपयोग करना बेहतर होगा? मेरा अनुभव यह है कि कंपाइलर लोडर सही ढंग से मेरे द्वारा करने के बारे में अधिक जानना जानता है - और मैंने देखा है कि अधिक लोगों को साझा ऑब्जेक्ट्स के निर्माण के कारण दुर्घटना में आना पड़ता है जब इसके बजाय कंपाइलर का उपयोग करते समय सीधे ld का उपयोग करें। / Li>

Comments

Popular posts from this blog

c# - sqlDecimal to decimal clr stored procedure Unable to cast object of type 'System.Data.SqlTypes.SqlDecimal' to type 'System.IConvertible' -

Calling GetGUIThreadInfo from Outlook VBA -

Obfuscating Python code? -