AIX

2012-01-19 16 views
8

पर स्ट्रीमस्ट्रीम का उपयोग करके मैं एक AIX बॉक्स पर एक साधारण सी ++ प्रोग्राम लिखने की कोशिश कर रहा हूं। कार्यक्रम नीचे दिया गया हैAIX

# include <iostream> 
# include <fstream> 
using namespace std ; 


int main() 
{ 
    ofstream of ; 
    of.open("license.txt") ; 
    of<<"hello"<<endl ; 
    of.close() ; 
} 

मेरे LDFLAGS निम्नलिखित के रूप में सेट कर दिया जाता है:

-maix64 -L/disk3/TOOLS/GCCTools/gcc-4.5.1/lib/ppc64 \ 
-L/disk3/TOOLS/GCCTools/gcc-4.5.1/lib/gcc/powerpc-ibm-aix6.1.0.0/4.5.1/ppc64 \ 
-L/disk3/TOOLS/GCCTools/gcc-4.5.1/lib/gcc/powerpc-ibm-aix6.1.0.0/4.5.1 \ 
-L/disk3/TOOLS/OPENSSL/lib 

CFLAGS है:

-O2 -maix64 -I/disk3/TOOLS/OPENSSL/include -D_ALL_SOURCE -D_XOPEN_SOURCE \ 
-D_XOPEN_SOURCE_EXTENDED -DSS_64BIT_SERVER -D_POSIX_SOURCE -D__64BIT__ \ 
-I/disk3/TOOLS/OPENSSL/include -I/usr/include \ 
-I/disk3/TOOLS/GCCTools/gcc-4.5.1/lib/gcc/powerpc-ibm-aix6.1.0.0/4.5.1/include 

कार्यक्रम ठीक संकलित करता है। लेकिन जब मैं इसे चलाने की कोशिश करता हूं, तो प्रोग्राम एक सेगमेंटेशन गलती के साथ आता है। मैं gdb के साथ एक ही भाग गया और जब मैं ofstream का उपयोग निम्न मुद्दा पाया:

Program received signal SIGSEGV, Segmentation fault. 
0x09000000036107c4 in std::locale::operator=(std::locale const&) (this= 
findvar.c:706: internal-error: value_from_register: Value not stored anywhere! 

ऐसा क्यों हो रहा है पर कोई विचार? किसी भी मदद की सराहना की है :)

नोट: अपने आप में fstream काम करता है ...

+0

क्या इसे जीसीसी संस्करण या जीसीसी संकलित करने के तरीके के साथ कुछ करना है? सिर्फ अनुमान। – Ricketyship

उत्तर

0

यह थोड़ी देर हो गया है, लेकिन मेरे सिर से बाहर: क्या आपको संकलन/लिंक विकल्पों में -pthread जोड़ने की आवश्यकता नहीं है?

+0

से करते हैं, मैंने एलडीएफएलजीएस में विकल्प का उपयोग करने का प्रयास किया। काम नहीं किया मैं अभी भी कोर डंप का एक ही मुद्दा था। – Ricketyship

+0

मुझे लगता है कि आपको सीसीएफएलजीएस और एलडीएफएलजीएस दोनों में इसकी ज़रूरत है, लेकिन यह पूरी बात सिर्फ एक अनुमान थी :-) –

+0

निश्चित रूप से जल्द ही परिणाम को आजमाकर अपडेट करेगा :) – Ricketyship

0

मैं इस मुद्दे का विश्लेषण किया और चारों ओर एक काम मिल गया है।

मैं अपने testprog निष्पादन पर एक ldd किया:

ldd test 
test needs: 
     /usr/lib/threads/libc.a(shr_64.o) 
     /disk3/TOOLS/GCCTools/gcc-4.5.1/lib/gcc/powerpc-ibm-aix6.1.0.0/4.5.1/pthread/ppc64/libstdc++.a(libstdc++.so.6) 
     /disk3/TOOLS/GCCTools/gcc-4.5.1/lib/gcc/powerpc-ibm-aix6.1.0.0/4.5.1/pthread/ppc64/libgcc_s.a(shr.o) 
     /unix 
     /lib/libcrypt.a(shr_64.o) 
     /lib/libpthreads.a(shr_xpg5_64.o) 

मैंने पाया कि pthread के libstdc किया जा रहा था

यहाँ मैं क्या किया है। यह मेरा LIBPATH/usr

अगला से पहले इस मार्ग होने की वजह से था, मैं उन सभी रास्तों जो इस्तेमाल किया जा रहा है pthread था जीसीसी बाहर करने के लिए मेरी LIBPATH रीसेट, सुनिश्चित करते हुए कि अन्य जीसीसी पुस्तकालयों LIBPATH

में

जहां उपलब्ध इस्तेमाल किया अंत में मैंने इस नए LIBPATH

नोट के साथ परीक्षण कार्यक्रम संकलित किया: नोट: LD_LIBRARY_PATH लिनक्स द्वारा उपयोग किया जाता है और LIBPATH AIX द्वारा उपयोग किया जाता है।

चीयर्स!

+0

तो, '-pthread' विकल्प का उपयोग करके फिर काम नहीं किया? –

+0

@ ईसाई.के: हाँ यह किया। मैंने पहले ही आपके उत्तर पर टिप्पणी की थी :) यदि आप मुझसे पूछें, तो दोनों जवाब सही हैं। या तो आप अपने CFLAGS में पठित करते हैं या प्रोग्राम को अपने डिफ़ॉल्ट पुस्तकालयों का उपयोग pthread पुस्तकालयों – Ricketyship

1

मुझे एक ही त्रुटि मिलती है। त्रुटि को दोबारा करने के लिए मुख्य बिंदु हैं: 1 शेयर libary में std :: stream (जैसे std :: ofstream) का उपयोग करें; 2 शेयर लाइब्रेरी में pthread फ़ंक्शन (जैसे pthread_self) का उपयोग करें; कोड को अनुकूलित करने के लिए 3 "-O2" का उपयोग करें। फिर यह "सेगमेंटेशन गलती (कोर डंपेड)" दिखाता है।

एईक्स libstdC++ के 2 संस्करण (64 बिट) प्रदान करता है। (http://www.perzl.org/aix/index.php?n=Main.GCCBinariesVersionNeutral देखें) 64-बिट संकलन, गैर धागा सुरक्षित (<prefix>/ppc64) 64-बिट संकलन, धागा सुरक्षित (<prefix>/pthread/ppc64)

मेरे समाधान है: परिवर्तन LIBPATH "<prefix>/pthread/ppc64" संस्करण का उपयोग करने के लिए। जैसे सेट LIBPATH को "/opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.6.1/pthread/ppc64/"

यह मेरी मशीन में अच्छी तरह से काम करता है।

+0

यह काम करेगा ....? –

+0

@ तुषारगुप्ता pthread विकल्प का उपयोग कर काम करता है। बदलना LIBPATH भी काम करता है। यह उपयोगकर्ता-सुरक्षित होने के लिए सुरक्षित है क्योंकि यह सुनिश्चित करता है कि किसी भी अन्य लिंक को याद किया जा सकता है। – Ricketyship

+0

+1 :) .................. –