2012-12-25 30 views
8

Đây là một MPI đơn giản "Xin chào, Thế giới!" chương trình.Mở MPI "Xin chào, Thế giới!" không biên dịch

#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); 
} 

Tuy nhiên, nó dường như không biên dịch:

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 

Tôi đã googled rất nhiều, danh sách gửi thư xem, hàng ngàn trong số họ. Họ nói rằng libmpi_cxx không liên kết. Nhưng nó nằm trong cờ biên dịch.

Đây là --showme dữ liệu:

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 

trình biên dịch của tôi là g ++.

+1

Bạn có đang liên kết đúng thư viện (đúng) không? –

+0

@MarkGarcia, ý của bạn là gì sau khi liên kết đúng? – efpies

+2

Bạn có thể cho chúng tôi thấy (các) dòng lệnh hoàn chỉnh mà bạn sử dụng để biên dịch và liên kết mã này không? Như được viết, mã của bạn sẽ có thể biên dịch và liên kết với 'mpicc', vì nó không tham chiếu đến các ràng buộc C++. – Novelocrat

Trả lời

8

Chỉ cần đặt các tập tin tiêu đề mpi.h trên tất cả các tập tin tiêu đề đôi khi gây ra vấn đề để biên dịch

Tôi không chắc chắn như thế nào u thực thi mã của bạn. Biên soạn

mpic++ your_code_file.c 

Thực hiện

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

Không, tôi đã thử nó lúc đầu. – efpies

1

Nó là một cũng easer hơn và linh hoạt hơn để biên dịch chương trình openmpi và Bộ KH & ĐT trong một "Eclipse cho phát triển ứng dụng song song" IDE.

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

+0

Vấn đề là sử dụng openmpi trên máy chủ từ xa mà không cần quyền 'sudo'. Nhưng cảm ơn rất nhiều cho một liên kết, có lẽ tôi có thể sử dụng IDE này trên Mac Mini của tôi do các vấn đề với MacPorts. – efpies

1

Một vài lưu ý:

  1. Lưu ý rằng mở MPI 1.5 là cổ đại. Vui lòng nâng cấp lên phiên bản mới nhất trong loạt Open MPI 1.6.x (hiện tại là 1.6.3, nhưng lưu ý rằng trang web www.open-mpi.org hiện đang được bảo trì theo kế hoạch cuối năm và sẽ không quay lại cho đến ngày hôm nay, thứ Năm, ngày 28 tháng 12 năm 2012).

  2. Tôi tò mò: tại sao bạn biên dịch chương trình C bằng mpiC++? Bạn chỉ cần sử dụng mpicc - trình biên dịch trình bao bọc C MPI. Điều đó chắc chắn sẽ tránh được vấn đề của bạn. Tuy nhiên, nếu bạn đang sử dụng chương trình C hello world nhỏ như một ví dụ đơn giản và đích thực của bạn là biên dịch một chương trình C++ MPI, thì mpiC++ là trình bao bọc đúng (ngay cả với một chương trình C đơn giản). Nếu đó là trường hợp, sau đó bạn có một số loại không tương thích/sai cấu hình giữa trình biên dịch C++ của bạn và trình biên dịch C++ mà mở MPI được biên dịch/cài đặt với.

  3. Nhìn vào đầu ra mpiC++ --showme của bạn, có vẻ như bạn có một số loại phân phối gói Open MPI - -R không được đặt trong cờ theo mặc định, ví dụ. Bạn đã cài đặt bản mở rộng MPI này ở đâu? Hoàn toàn có thể là nó không hoàn toàn tương thích với cài đặt g ++ của bạn (ví dụ, nếu nó được biên dịch với một phiên bản khác của g ++).

  4. Điều đó đang được nói, đầu ra mpiC++ --showme của bạn cũng lạ khi nó liệt kê -lmpi_cxx tại số kết thúc của dòng. Nó phải nằm ở số bên trái trong tổng số -mpi, không phải là ngay của nó. Tôi không cho thấy cách cài đặt của bạn bị borked như thế, nhưng đó là một nguyên nhân có thể.

Vì vậy, để tổng hợp, câu trả lời của tôi là:

  1. Hãy thử nâng cấp mở MPI và xem nếu vấn đề đi xa.
  2. Kiểm tra kỹ xem cài đặt Open MPI của bạn có tương thích với hệ thống của bạn hay không.
+0

Tôi đã gặp vấn đề này từ lâu và bây giờ không phải như vậy, nhưng tôi muốn trả lời (3). "Bạn đã cài đặt bản mở rộng MPI này ở đâu? Tôi sử dụng Mac OS X và tôi cố gắng tránh việc cấu hình và cài đặt phần mềm thủ công. Vì vậy, tôi đã sử dụng MacPorts để cài đặt thư viện OpenMPI (cũng như gcc/g ++). Dường như nó có thể gây ra vấn đề, vì vậy có lẽ đó là một quyết định tốt để cài đặt OpenMPI theo cách thủ công (ít nhất là vào cuối năm 2012). Có lẽ nó giúp ai đó. – efpies

Các vấn đề liên quan