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