-fPIC

2013-08-22 7 views
5

के साथ पुन: संकलन मेरे पास MPICH 3.0.4 मेरी मशीन (उबंटू 12.04) पर स्थापित है। मैं Qthreads नामक एक लाइब्रेरी स्थापित करने की कोशिश कर रहा हूं जिसे मैंने पहले काम किया है और सफलतापूर्वक इंस्टॉल किया है (MPICH2 पैकेज को छोड़कर)। विन्यास ठीक काम करता है:-fPIC

./configure --prefix=/usr/local/qthreads --enable-multinode --with-multinode-runtime=mpi --with-portals4=/usr/local/portals4 --with-hwloc=/usr/local/hwloc:

... 
... 
... 
System Characteristics: 
     Target Style: unix 
     Multi-node: yes, mpi 
     Topology API: hwloc 
     Qtimer type: clock_gettime 
    Aligned_t size: 8 (aligned on 8 byte boundaries) 
Default Stack size: 4kB 

Safety/Debugging: 
    Sanity assert()s: no 
    Check alignment: no 
      Profiling: none 
    Debugging Output: no 
     Guard Pages: no 

Speed: 
      Scheduler: sherwood (multiworker shepherds) 
     Sinc Style: donecount 
     Barrier Style: feb 
    Dictionary Style: simple 
    Lazy Thread IDs: yes 
     Pools/caches: memory, spawns 
      RCRTool: no 
Increments/CAS/FEBs: Compiler Builtin (both), lock-based hash 

जब मैं कोशिश करते हैं और make चलाने के लिए, मैं निम्नलिखित त्रुटि मिलती है:

... 
    ... 
    ... 
    CCLD  libqthread.la 
/usr/bin/ld: /usr/local/lib/libmpich.a(barrier.o): relocation R_X86_64_32 against `MPIR_ThreadInfo' can not be used when making a shared object; recompile with -fPIC 
/usr/local/lib/libmpich.a: could not read symbols: Bad value 
collect2: ld returned 1 exit status 
make[2]: *** [libqthread.la] Error 1 
make[2]: Leaving directory `/home/alex/Downloads/qthread-1.9/src' 
make[1]: *** [all-recursive] Error 1 
make[1]: Leaving directory `/home/alex/Downloads/qthread-1.9/src' 
make: *** [all-recursive] Error 1 

मैं looked around है और यह स्पष्ट है (और संभव ही लगता है) समाधान यह है कि संकलक क्या कहता है: -fPIC के साथ पुन: संकलित करें। हालांकि, मुझे कथ्रेड के लिए मेकफ़ाइल के माध्यम से जाने और संपादित करने में संकोच नहीं है, क्योंकि वे लंबे और जटिल हैं। -fPIC के साथ पुन: संकलित करने का कोई आसान तरीका है?

कृपया सलाह दें। मैं किसी भी इनपुट की सराहना करता हूं।

उत्तर

3

सभी चर्चाओं के बाद, मैंने एमपीआईसी 3.0.4 का पूरी तरह से ताजा इंस्टॉल किया, --enable-shared के साथ एकमात्र कॉन्फ़िगरेशन विकल्प दिया गया। कुछ कारणों से यह पहले ऐसा नहीं करने के बावजूद संकलित और बनाया गया है। यह पूरा होने के बाद, Qthreads को कॉन्फ़िगर किया गया था और बिना किसी अतिरिक्त विकल्प की आवश्यकता के सफलतापूर्वक बनाया गया था।

0

अंतिम उत्तर प्रश्न में मेकफ़ाइल पर निर्भर होने जा रहा है लेकिन make CFLAGS=-fPIC का उपयोग कर MYCFLAGS या अन्य कई ऐसे चर के रूप में काम कर सकता है। आपको यह देखना होगा कि उस संग्रह को बनाने के लिए Qthreads का उपयोग किस प्रकार किया जा रहा है।

2

यह भी संभव है कि यह एक लक्षण है और समस्या नहीं है। इस उत्तर पर नज़र डालें और देखें कि क्या यह मदद करता है (how to recompile with -fPIC)। एमपीआईसी 3.0.4 के रूप में, डिफ़ॉल्ट के बजाय साझा पुस्तकालयों के साथ डिफ़ॉल्ट बनाना है, इसलिए आपको यह सुनिश्चित करने की आवश्यकता हो सकती है कि वे सुसंगत हैं।

+0

संदर्भ वेस्ले के लिए धन्यवाद। मैंने समाधान की जांच की और किसी भी किस्मत के बिना कुछ अलग विन्यास की कोशिश की। मैंने एमपीआईआई को '- सक्षम-साझा' के साथ एक समान त्रुटि से मिलने के लिए पुनः प्रयास करने की कोशिश की ('.rodata' के विरुद्ध 'स्थानांतरण R_X86_64_32' का उपयोग साझा ऑब्जेक्ट करते समय नहीं किया जा सकता; ... ')। फिर मैंने क्यूथ्रेड को '--enable- shared' और '--disable-static' के साथ पुन: संकलित करने की कोशिश की, बिना किसी भाग्य (ओपी में समान त्रुटि) के साथ। क्या आपके पास कोई सुझाव है कि मुझे एमपीआईसी या क्यूथ्रेड्स को फिर से कैसे सम्मिलित करना चाहिए? –

+0

क्या आपने एमपीआईआई को '-नेबल-स्टेटिक' के साथ संकलित करने का प्रयास किया था क्योंकि यह गैर-डिफ़ॉल्ट मामला है? यह शायद कोई फर्क नहीं पड़ेगा, लेकिन यह एकमात्र संयोजन है जिसे आपने छोड़ा है? –

+0

मैं सफलतापूर्वक संकलित और 'सक्षम-स्थिर' के साथ एमपीआईसी बनाने में सक्षम था। हालांकि मैं अभी भी 'सक्षम-साझा' और '-नेबल-स्टेटिक' के प्रत्येक संयोजन की कोशिश करने के बाद भी Qthreads बनाने में असमर्थ हूं; मैं वही त्रुटि प्राप्त करना जारी रखता हूं, भले ही मैं इसका उपयोग करता हूं। –

संबंधित मुद्दे