У меня есть MPICH 3.0.4, установленный на моей машине (Ubuntu 12.04). Я пытаюсь установить библиотеку с именем Qthreads, с которой я работал и ранее был установлен (за исключением установленного пакета MPICH2). Конфигурация работает отлично:Перекомпиляция с -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
Когда я пытаюсь запустить make
, я получаю следующее сообщение об ошибке:
...
...
...
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
У меня есть looked around и кажется очевидным (и возможно только) решение должно сделать то, что говорит компилятор: перекомпилировать с -fPIC
. Тем не менее, я не решаюсь пройти и редактировать любые Make-файлы для Qthreads, поскольку они длинные и сложные. Есть ли простой способ перекомпиляции с -fPIC
?
Просьба сообщить. Я ценю любой вклад.
Благодарим вас за обращение Уэсли. Я проверил решение и попробовал несколько разных конфигураций без везения. Я попытался перекомпилировать MPICH с '--enable-shared' только для того, чтобы встретить аналогичную ошибку (' relocation R_X86_64_32 против '.rodata' не может использоваться при создании общего объекта; ... '). Затем я попытался перекомпилировать Qthreads с '--enable-shared' и' --disable-static' также без везения (такая же ошибка, как в OP). Есть ли у вас какие-либо предложения относительно того, как мне перекомпилировать MPICH или Qthreads? –
Вы пытались скомпилировать MPICH с '--enable-static', так как это случай, отличный от стандартного? Вероятно, это не повлияет, но это единственная комбинация, которую вы оставили? –
Я смог успешно скомпилировать и построить MPICH с помощью 'enable-static'. Однако я все еще не могу сделать Qthreads, даже после попытки каждой комбинации «--enable-shared» и «--enable-static»; Я продолжаю получать ту же ошибку, независимо от того, какую пользу я использую. –