2012-08-27 22 views
6

मैं शामिल एक परियोजना हैlibtol स्क्रिप्ट में लिपटे प्रोग्राम को डीबग कैसे करें?

  • साझा पुस्तकालयों अर्थात्: mylib.so
  • (परीक्षण) प्रोग्राम का उपयोग इन साझा पुस्तकालयों अर्थात्: test_mylib

जब मैं test_mylib पर gdb चलाने का प्रयास, यह प्रिंट:

"test_mylib": not in executable format: File format not recognized 

जब मैं असली प्रोग्राम का उपयोग करता हूं (.libs/test_mylib) के बजाय सीधे, यह अभी भी शिकायत है:

.libs/test_mylib: can't load library 'libhello.so.0' 

मैं अपने कार्यक्रम डिबग करने के लिए gdb दिखा सकता हूं?

उत्तर

9

यह समस्या है कि मैं कुछ दिनों पहले एक जोड़े में भाग गया था और अभी तक SO पर कोई सामान्य जवाब नहीं है। केवल विशेष मामले। यहां इस पृष्ठ पर मिले उत्तर हैं: http://www.gnu.org/software/libtool/manual/html_node/Debugging-executables.html

प्रोग्राम स्थापित होने तक, सिस्टम नहीं जानता कि साझा वस्तुओं को कहां देखना है। वे आमतौर पर .libs उनके स्रोत फ़ोल्डर की उप-निर्देशिका में निहित हैं।

Libtool से पहले वास्तविक स्थापना से किया जाता है डिबगिंग की अनुमति के लिए एक सुविधा स्क्रिप्ट उत्पन्न करता है (जो से पहले गाड़ी सॉफ्टवेयर स्थापित करने के लिए चाहता है, डिबग यह के बाद?)

सौभाग्य से, उत्पन्न स्क्रिप्ट इस के लिए एक सहायक प्रदान करता है :

libtool --mode=execute gdb test_mylib 
+0

ओएस एक्स मशीन पर, मुझे 'त्रुटि मिलती है: libtool: अज्ञात विकल्प वर्ण \' - 'में: --mode = execute' (मेरा वर्कअराउंड उपसर्ग में स्थापित करना था, लेकिन शायद - उल्लेखनीय रूप से साझा किया गया नीचे लंबे समय तक सरल है) – unhammer

3

समाधान libtool डॉक्स द्वारा सिफारिश की विकास के दौरान जोड़ने स्थिर उपयोग करने के लिए, के रूप में मैं कम से वर्णित है: Build libtool application with static linking to local components

ऐसा करने के लिए, स्क्रिप्ट के लिए --disable-shared विकल्प का उपयोग करें।

उदाहरण के लिए:

./configure --enable-debug --disable-shared 

अब उत्पन्न निष्पादन एक सीधे निष्पादन के बजाय द्विआधारी एक libtool स्क्रिप्ट है।

इसमें बिल्ड समय को मोटे तौर पर कम करने का अतिरिक्त लाभ है।

+0

'--disabled- shared' समाधान के बिना अन्य पृष्ठभूमि जानकारी: https://autotools.io/libtool/wrappers.html और https://www.gnu.org/software/libtool /manual/html_node/Debugging-executables.html – nobar