बनाने मैं gcc
के ld
जब -fpic
ध्वज के साथ संकलित ऑब्जेक्ट फाइलों का एक समूह से एक साथ एक साझा पुस्तकालय डाल अनसुलझे संदर्भ की अनदेखी करने के लिए कोशिश कर रहा हूँ अपरिभाषित संदर्भ की अनदेखी करने के।हो रही ld जब एक साझा lib
मैं अब तक इस तरह के रूप (संक्षिप्तता के लिए कुछ छोटे लोगों के साथ कई वस्तु फ़ाइलों की लंबी फ़ाइल नाम की जगह) विकल्पों में से एक गुच्छा की कोशिश की:
ld --allow-shlib-undefined --unresolved-symbols=ignore-all -shared 1.o 2.o -o lib0.so
ld -G 1.o 2.o -o lib0.so
(मैंने लाल somewhere कि -G
होगा अनसुलझे संदर्भ की अनुमति देते हैं, लेकिन यह के साथ कोई किस्मत थी।)
यह चल रहा है, हालांकि gcc
(-Wl,--unresolved-symbols=ignore-all
के साथ) कम अनसुलझे संदर्भ में परिणाम के रूप में यह
-lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt
साथ डिफ़ॉल्ट रूप से लिंक
लेकिन यह अभी भी -lopengl32
और -lgdi32
नहीं होने के बारे में शिकायत करता है।
, -fpic
बिना lib संकलन इसे करने के लिए ar
और स्थिर जोड़ने के साथ एक .a
में सभी वस्तु फ़ाइलों stashing जबकि पूरी तरह से ठीक काम कर रहा में करने के लिए -lopengl32
और -lgdi32
परिणाम exe कार्यक्रम लिंक हो रही है।
[file].o: In function `[function]': [file].cpp:19: undefined reference to `memcpy'
[file].o: In function `[function]': [file].cpp:26: undefined reference to `memcpy'
[file].o:[file].cpp:(.xdata+0x4c): undefined reference to `__gxx_personality_seh0'
[file].o:[file].cpp:(.xdata+0x74): undefined reference to `__gxx_personality_seh0'
[file].o:[file].cpp:(.rdata$[file]]+0x20):undefined reference to `__cxa_pure_virtual'
[file].o:[file].cpp:(.rdata$[file]]+0x28): undefined reference to `__cxa_pure_virtual'
मैं ld
कैसे प्राप्त कर सकता अपरिभाषित संदर्भ की अनदेखी करने के (कम से कम libopengl32
से और libgdi32
नहीं करता है, तो libstdc++
आदि भी) और:
वास्तविक त्रुटि संदेश (संक्षिप्तता के लिए लंबे समय से फ़ाइल और समारोह के नाम की जगह) कार्यक्रम का उपयोग करने जा रहे हैं जो उन्हें लिंक करने के लिए जा रहे हैं?
जब मुझे अपनी सामग्री में '__gxx_personality_seh0' त्रुटि मिली तो मैंने gcc के बजाय g ++ के साथ संकलित किया और यह चला गया। देखें कि यह आपके लिए काम करता है या नहीं। –
@JerryJeremiah वहां कई त्रुटियों में से एक है, मूल रूप से प्रत्येक कॉल के लिए 'memcpy', openl to any call, आदि के लिए प्रत्येक कॉल के लिए एक और यह मुद्दा यह है कि मैं 'ld' का उपयोग करने की कोशिश नहीं कर रहा हूं 'g ++', प्रोग्राम '.o' फ़ाइलों के लिए ठीक से संकलित कर रहा है, मैं बस' ld' को अन्य libs से लिंक नहीं करते समय '.o' फ़ाइलों से साझा lib बनाने के लिए चाहता हूं। स्थिर स्थिर lib बनाने के लिए 'ld' का उपयोग करते समय यह ठीक काम करता है, लेकिन जब साझा किया जाता है, तो यह stdlib, opengllib, आदि से लिंक न करने की शिकायत करता है। यह प्रोग्राम जो std, opengl आदि के स्थिर lib लिंक का उपयोग करता है, उसे चाहिए सिद्धांत में भी साझा करने के लिए काम करते हैं। –