2012-04-12 9 views
0

Ich arbeite an einem Projekt, das MPI verwendet, um parallele Prozesse zu erstellen, jeder Prozess verwendet dlopen(), um ein Modul zu laden, das als eine gemeinsame Objektbibliothek erstellt wurde. Eines der Module, die ich schreibe, verwendet eine 3rd Party Library (HDF). Wenn ich das Programm laufen, wirft dlopen einen Fehler: dlopen fehlgeschlagen: /home/jwomble/QTProjects/SurrogateModule/libsurrogate.so: undefined Symbol: H5T_NATIVE_INT32_gGemeinsame Objektbibliothek und MPI

Das undefinierte Symbol in der HDF-Bibliothek ist. Wie lade ich die Symbole aus der HDF-Bibliothek?

Derzeit sieht mein Make-Datei wie folgt:

CC  = mpicc 

INCDIR = -I /home/jwomble/QTProjects/STARExecutive/src/star_comm \ 
     -I /home/jwomble/QTProjects/STARExecutive/src/executive \ 
     -I /home/jwomble/QTProjects/Star \ 
    -I ./phdf/include 

CFLAGS = -Wall -rdynamic -g -fPIC $(INCDIR) 

all: libsurrogate.so 

libsurrogate.so: SurrogateModule.o 
    $(CC) -shared --export-dynamic -o [email protected] $< 

SurrogateModule.o: SurrogateModule.c 
    $(CC) $(CFLAGS) -lhdf5 -c $< 

Dank!

Antwort

1

Sie verknüpfen nicht tatsächlich mit hdf5. Die -l Flagge ist nutzlos, wenn sie zusammen mit -c verwendet wird.

Moving -lhdf5 bis zur Verknüpfung von libsurrogate.so sollte das Problem beheben.