2012-12-25 23 views
8

संकलित नहीं कर रहा है यहां एक साधारण एमपीआई है "हैलो, वर्ल्ड!" कार्यक्रम।ओपन एमपीआई "हैलो, वर्ल्ड!"

#include <stdio.h> 
#include <mpi.h> 

int main(int argc, char **argv) 
{ 
    int size, rank; 
    MPI_Init(&argc, &argv); 
    MPI_Comm_size(MPI_COMM_WORLD, &size); 
    MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
    printf("SIZE = %d RANK = %d\n",size,rank); 
    MPI_Finalize(); 
    return(0); 
} 

हालांकि, यह संकलन नहीं लगता है:

Undefined      first referenced 
symbol        in file 
MPI::Datatype::Free()    /var/tmp//ccE6aG2w.o 
MPI::Win::Free()     /var/tmp//ccE6aG2w.o 
MPI::Comm::Comm()     /var/tmp//ccE6aG2w.o 
ld: fatal: symbol referencing errors. No output written to main 
collect2: ld returned 1 exit status 

मैं एक बहुत, देखी मेलिंग सूची, उनमें से हजारों googled है। वे कहते हैं कि libmpi_cxx लिंक नहीं कर रहा है। लेकिन यह कंपाइलर झंडे में है।

mpic++ --showme:compile 
-I/usr/openmpi/ompi-1.5/include -I/usr/openmpi/ompi-1.5/include/openmpi 

mpic++ --showme:link 
-R/opt/mx/lib -R/usr/openmpi/ompi-1.5/lib -L/usr/openmpi/ompi-1.5/lib -lmpi -lopen-rte -lopen-pal -lnsl -lrt -lm -ldl -lsocket -lmpi_cxx 

मेरे संकलक जी ++ है:

यहाँ --showme डाटा नहीं है।

+1

क्या आप सही (सही) लाइब्रेरी को सही तरीके से जोड़ रहे हैं? –

+0

@ मार्कगार्शिया उचित लिंकिंग के बाद आपका क्या मतलब है? – efpies

+2

क्या आप हमें इस कोड को संकलित और लिंक करने के लिए उपयोग की जाने वाली पूर्ण कमांड लाइन (ओं) दिखा सकते हैं? जैसा लिखा है, आपका कोड 'mpicc' के साथ संकलित और लिंक करने में सक्षम होना चाहिए, क्योंकि यह C++ बाइंडिंग का कोई संदर्भ नहीं देता है। – Novelocrat

उत्तर

8

बस सब हेडर फाइल कभी कभी का कारण बनता है कि इस समस्या को संकलित करने के लिए

मुझे यकीन है कि कैसे यू अपने कोड निष्पादित नहीं कर रहा हूँ ऊपर mpi.h हेडर फाइल जगह। संकलन

mpic++ your_code_file.c 

निष्पादन

mpirun -np <no. of Processors> ./a.out 
+0

नहीं, मैंने इसे पहले कोशिश की। – efpies

1

यह एक भी ज्यादा easer और "समांतर आवेदन डेवलपर्स के लिए ग्रहण" एक में openmpi और एमपीआई कार्यक्रमों संकलित करने के लिए और अधिक लचीला आईडीई है।

http://www.eclipse.org/downloads/packages/eclipse-parallel-application-developers/junosr1

+0

बिंदु रिमोट सर्वर पर ओपनंपी का उपयोग बिना 'सूडो' अधिकारों के बिना करना था। लेकिन एक लिंक के लिए बहुत बहुत धन्यवाद, शायद मैकपॉर्ट्स के साथ समस्याओं के कारण मैं अपने मैक मिनी पर इस आईडीई का उपयोग कर सकता हूं। – efpies

1

कुछ नोट:

  1. ध्यान दें कि ओपन एमपीआई 1.5 प्राचीन है। कृपया ओपन एमपीआई 1.6.एक्स श्रृंखला (जो वर्तमान में 1.6.3 है, में नवीनतम संस्करण में अपग्रेड करें, लेकिन ध्यान दें कि www.open-mpi.org वेबसाइट वर्तमान में नियोजित वर्ष-अंत रखरखाव से गुज़र रही है और वापस नहीं आएगी बाद में आज तक, गुरुवार, 28 दिसंबर, 2012)।

  2. मुझे उत्सुकता है: आप mpiC++ के साथ एक सी प्रोग्राम क्यों संकलित कर रहे हैं? आपको केवल एमपीपीसी - सी एमपीआई रैपर कंपाइलर का उपयोग करने की आवश्यकता है। यह निश्चित रूप से आपकी समस्या से बच जाएगा। हालांकि, यदि आप इस छोटे सी हैलो वर्ल्ड प्रोग्राम का उपयोग एक साधारण उदाहरण के रूप में कर रहे हैं और आपका वास्तविक लक्ष्य एक सी ++ एमपीआई प्रोग्राम को संकलित करना है, तो एमपीपी ++ सही रैपर का प्रयास करने के लिए सही रैपर है (यहां तक ​​कि एक साधारण सी प्रोग्राम के साथ)। यदि ऐसा है, तो आपके पास अपने सी ++ कंपाइलर और सी ++ कंपाइलर के बीच किसी प्रकार की असंगतता/गलत कॉन्फ़िगरेशन है जिसे ओपन एमपीआई संकलित/स्थापित किया गया था।

  3. अपने एमपीपी ++ - शोवेम आउटपुट को देखते हुए, ऐसा लगता है कि आपके पास ओपन एमपीआई - -R का कुछ प्रकार का पैकेज वितरण डिफ़ॉल्ट रूप से झंडे में नहीं रखा गया है, उदाहरण के लिए। आपको यह ओपन एमपीआई इंस्टॉलेशन कहां मिला? यह काफी संभव है कि यह आपके g ++ स्थापना (उदा।, अगर इसे g ++ के किसी भिन्न संस्करण के साथ संकलित किया गया हो) के साथ संगत (पूरी तरह से) संगत नहीं है।

  4. कहा जा रहा है, अपने mpiC++ --showme उत्पादन में है कि यह लाइन की अंत पर -lmpi_cxx को सूचीबद्ध भी अजीब है। यह बाएं -lmpi के लिए होना चाहिए, सही पर नहीं। मैं यह नहीं दिखा रहा हूं कि आपकी स्थापना कैसे इस तरह बर्क हो गई, लेकिन यह एक और संभावित कारण है।

तो योग करने के लिए, मेरे जवाब है:

  1. ओपन एमपीआई अपग्रेड करने का प्रयास करें और देखें कि समस्या दूर हो जाने दें।
  2. डबल जांचें कि ओपन एमपीआई की स्थापना आपके सिस्टम के अनुकूल है।
+0

मुझे बहुत पहले यह समस्या थी और अब यह मामला नहीं था, लेकिन मैं जवाब देना चाहता हूं (3)। 'आपको यह ओपन एमपीआई इंस्टॉलेशन कहां मिला?' मै मैक ओएस एक्स का उपयोग करता हूं और मैं मैन्युअल कॉन्फ़िगरिंग और सॉफ्टवेयर इंस्टॉल करने से बचने की कोशिश करता हूं। इसलिए मैंने ओपनएमपीआई लाइब्रेरी (साथ ही जीसीसी/जी ++) स्थापित करने के लिए मैकपॉर्ट्स का इस्तेमाल किया। ऐसा लगता है कि इससे समस्याएं पैदा हो सकती हैं, इसलिए शायद ओपनएमपीआई को मैन्युअल रूप से स्थापित करने का एक अच्छा निर्णय है (कम से कम 2012 के अंत तक)। शायद यह किसी की मदद करता है। – efpies

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