我的机器上安装了MPICH 3.0.4(Ubuntu 12.04)。我正在尝试安装一个名为Qthreads的库,我已经使用过并成功安装过(除了安装了MPICH2软件包)。配置工作正常:
./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
重新编译。但是,我很犹豫是否要编辑Qthreads的任何Makefile,因为它们很长很复杂。有没有一种简单的方法可以使用-fPIC
重新编译?
请指教。我很感激任何意见。
答案 0 :(得分:3)
在所有讨论之后,我做了一个全新的MPICH 3.0.4安装,--enable-shared
是唯一给出的配置选项。由于某种原因,它成功编译和构建,尽管之前没有这样做。完成此操作后,Qthreads已成功配置和构建,无需任何额外选项。
答案 1 :(得分:2)
这也可能是症状,而不是问题。看看这个答案,看看它是否有帮助(how to recompile with -fPIC)。从MPICH 3.0.4开始,默认是使用共享库而不是静态构建,因此您可能需要确保它们一致。
答案 2 :(得分:0)
最终答案将取决于所讨论的makefile,但使用make CFLAGS=-fPIC
可能会像MYCFLAGS
或任何其他此类变量一样工作。您必须查看并查看Qthreads用于创建该存档的内容。