2013-08-22 3 views
5

У меня есть 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?

Просьба сообщить. Я ценю любой вклад.

ответ

3

После всего обсуждения я сделал совершенно новую установку MPICH 3.0.4, причем --enable-shared является единственным параметром конфигурации. По какой-то причине он скомпилировался и успешно сработал, несмотря на то, что раньше этого не делал. После этого Qthreads был сконфигурирован и построен успешно, не требуя дополнительных опций.

0

Окончательный ответ будет зависеть от рассматриваемых make-файлов, но с использованием make CFLAGS=-fPIC может работать как может MYCFLAGS или любой другой ряд таких переменных. Вам нужно будет посмотреть, что использует Qthreads для создания этого архива.

2

Возможно также, что это симптом, а не проблема. Взгляните на этот ответ и посмотрите, помогает ли он (how to recompile with -fPIC). Начиная с версии MPICH 3.0.4, по умолчанию используется сборка с общими библиотеками вместо статики, поэтому вам может потребоваться убедиться, что они согласованы.

+0

Благодарим вас за обращение Уэсли. Я проверил решение и попробовал несколько разных конфигураций без везения. Я попытался перекомпилировать MPICH с '--enable-shared' только для того, чтобы встретить аналогичную ошибку (' relocation R_X86_64_32 против '.rodata' не может использоваться при создании общего объекта; ... '). Затем я попытался перекомпилировать Qthreads с '--enable-shared' и' --disable-static' также без везения (такая же ошибка, как в OP). Есть ли у вас какие-либо предложения относительно того, как мне перекомпилировать MPICH или Qthreads? –

+0

Вы пытались скомпилировать MPICH с '--enable-static', так как это случай, отличный от стандартного? Вероятно, это не повлияет, но это единственная комбинация, которую вы оставили? –

+0

Я смог успешно скомпилировать и построить MPICH с помощью 'enable-static'. Однако я все еще не могу сделать Qthreads, даже после попытки каждой комбинации «--enable-shared» и «--enable-static»; Я продолжаю получать ту же ошибку, независимо от того, какую пользу я использую. –

 Смежные вопросы

  • Нет связанных вопросов^_^