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