2013-08-22 14 views
5

Ich habe MPICH 3.0.4 auf meinem Rechner installiert (Ubuntu 12.04). Ich versuche, eine Bibliothek namens Qthreads zu installieren, mit der ich gearbeitet habe und die zuvor erfolgreich installiert wurde (außer mit dem installierten MPICH2-Paket). Die Konfiguration funktioniert:Neukompilierung mit -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 

Wenn ich versuche, und make laufen, ich folgende Fehlermeldung erhalten:

... 
    ... 
    ... 
    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 

Ich habe looked around und es scheint die offensichtliche (und nur möglich,) Lösung ist zu tun, was der Compiler sagt: kompilieren Sie mit -fPIC. Ich zögere jedoch, Makefiles für Qthreads durchzugehen und zu bearbeiten, da sie lang und kompliziert sind. Gibt es eine einfache Möglichkeit, mit -fPIC zu rekompilieren?

Bitte beraten. Ich schätze jede Eingabe.

Antwort

3

Nach der ganzen Diskussion, habe ich eine komplett neue Installation von MPICH 3.0.4, mit --enable-shared ist die einzige Konfigurationsoption gegeben. Aus irgendeinem Grund hat es kompiliert und erfolgreich gebaut, obwohl es vorher noch nicht geschehen ist. Nachdem dies erledigt war, wurde Qthreads erfolgreich konfiguriert und gebaut, ohne dass zusätzliche Optionen erforderlich waren.

0

Die ultimative Antwort hängt von den betreffenden Makefiles ab, aber die Verwendung von make CFLAGS=-fPIC könnte genauso gut funktionieren wie MYCFLAGS oder irgendeine andere Anzahl solcher Variablen. Sie müssen schauen und sehen, was Qthreads zum Erstellen dieses Archivs verwendet.

2

Es ist auch möglich, dass dies ein Symptom und nicht das Problem ist. Werfen Sie einen Blick auf diese Antwort und sehen Sie, ob es hilft (how to recompile with -fPIC). Ab MPICH 3.0.4 wird standardmäßig mit gemeinsamen Bibliotheken statt mit statischen Bibliotheken erstellt. Daher müssen Sie sicherstellen, dass sie konsistent sind.

+0

Vielen Dank für die Referenz Wesley. Ich überprüfte die Lösung und probierte ein paar verschiedene Konfigurationen ohne Glück aus. Ich habe versucht, MPICH mit '--enable-shared' neu zu kompilieren, nur um mit einem ähnlichen Fehler zu begegnen (' relocation R_X86_64_32 gegen '.rodata' kann nicht verwendet werden, wenn ein gemeinsames Objekt erstellt wird; ... '). Dann habe ich versucht, Qthreads mit '--enable-shared' und' --disable-static' auch ohne Glück neu zu kompilieren (gleicher Fehler wie in OP). Hast du irgendwelche Vorschläge, wie ich MPICH oder Qthreads neu kompilieren sollte? –

+0

Haben Sie versucht, MPICH mit '--enable-static' zu kompilieren, da dies nicht der Standardfall ist? Es wird wahrscheinlich keinen Unterschied machen, aber das ist die einzige Kombination, die du noch hast? –

+0

Ich konnte erfolgreich MPICH mit 'enable-static' kompilieren und aufbauen. Allerdings kann ich Qthreads nicht machen, selbst nachdem ich jede Kombination von '--enable-shared' und' -enable-static' versucht habe; Ich bekomme weiterhin denselben Fehler, unabhängig davon, welchen ich verwende. –