Не удается заставить Кабала найти библиотеку mpi для haskell-mpi в Windows

ПРОБЛЕМА РЕШЕНА!

  1. Следуйте инструкциям Dons, размещенным здесь
  2. Откройте переменные среды (Мой компьютер -> Свойства (в контекстном меню) -> Дополнительно)
  3. Добавить или создать новую переменную среды C_INCLUDE_PATH поэтому он указывает на каталог включения MPI. В моем случае, /c/program files/mpich2/include,
  4. Добавить или создать новую переменную среды LIBRARY_PATH поэтому он указывает на каталог lib MPI. В моем случае, /c/program files/mpich2/lib
  5. Спрячь libmpi.a как-нибудь. При необходимости вы можете исправить это позже. Это хак, но вы не можете собрать haskell-mpi без этого, потому что ld потерпит неудачу. Я переименовал его в _libmpi.a

Теперь haskell-mpi должен собираться на Windows. Предвидя больше неприятностей в будущем, но это построено, и это решило мою проблему.


Я хочу использовать haskell-mpi на лабораторной машине в одной из моих университетских лабораторий, чтобы сделать мой последний проект для своего класса параллельных вычислений, но у меня возникают проблемы, пытаясь заставить haskell-mpi построить против MPICH2.

haskell-mpi почти полностью не документирован, и копание в их git-репозитории помогло мне запрограммировать некоторые примеры программ на нем, но не помогло настроить его на Windows. В моей личной системе Linux у меня не было проблем с настройкой и запуском haskell-mpi против MPICH2.

Проблема, вероятно, в одном из cabal, в способе установки MPICH2 или в конфигурации cabal haskell-mpi, отсюда и выбор тегов.

Я открыт для экспериментов здесь с целью устранения неполадок и добавления дополнительной информации по мере необходимости, но со временем у меня больше не будет доступа к этим машинам.

У меня есть права администратора в лаборатории, где я буду работать, поэтому, если проблема связана с самой установкой MPICH2, я действительно мог бы переустановить его.

Cabal не работает следующим образом, когда я пытаюсь установить haskell-mpi:

Resolving dependencies...
Configuring haskell-mpi-1.0.0...
cabal: Missing dependency on a foreign library:
* Missing C library: mpi
This problem can usually be solved by installing the system package that
provides this library (you may need the "-dev" version). If the library is
already installed but in a non-standard location then you can use the flags
--extra-include-dirs= and --extra-lib-dirs= to specify where it is.
cabal: Error: some packages failed to install:
haskell-mpi-1.0.0 failed during the configure step. The exception was:
ExitFailure 1

Вот что я попытался дать для --extra-lib-dirs и --extra-include-dirs:

--extra-lib-dirs="C:\Program Files\MPICH2\lib" 
--extra-include-dirs="C:\Program Files\MPICH2\include"

Я попытался изменить порядок, где я поставил эти флаги, избегая зазоров, используя короткий путь PROGRA~1 и различные сочетания этих. Так что я не думаю, что это поможет. Мне нужно знать, что mpi Зависимость на самом деле означает и выяснить, как я буду ее удовлетворять, чтобы эта библиотека могла на самом деле построить. Вот что сейчас находится в двух вышеупомянутых папках:

Libs:

 Volume in drive C has no label.
 Volume Serial Number is 5406-5C5C

 Directory of C:\Program Files\MPICH2\lib

04/22/2011  01:20 PM    <DIR>          .
04/22/2011  01:20 PM    <DIR>          ..
01/31/2011  03:59 PM           515,704 cxx.lib
01/31/2011  04:23 PM           137,434 fmpich2.lib
01/31/2011  04:25 PM           410,982 fmpich2g.lib
01/31/2011  04:29 PM           162,690 fmpich2s.lib
01/31/2011  04:53 PM                 0 libfmpich2g.a
01/31/2011  04:53 PM                 0 libmpi.a
01/31/2011  04:53 PM           215,528 libmpicxx.a
01/31/2011  04:16 PM            10,618 mpe.lib
01/31/2011  04:46 PM           135,434 mpi.lib
               9 File(s)      1,588,390 bytes
               2 Dir(s)  221,505,835,008 bytes free

Включают:

 Volume in drive C has no label.
 Volume Serial Number is 5406-5C5C

 Directory of C:\Program Files\MPICH2\include

02/01/2011  05:38 PM    <DIR>          .
02/01/2011  05:38 PM    <DIR>          ..
11/17/2009  09:46 PM             4,857 clog_commset.h
11/02/2007  05:50 PM               696 clog_const.h
01/31/2011  03:50 PM               731 clog_inttypes.h
11/17/2009  09:46 PM             1,353 clog_uuid.h
10/21/2010  01:20 PM               355 mpe.h
11/17/2009  09:46 PM            11,102 mpe_log.h
11/02/2007  05:50 PM             1,833 mpe_logf.h
11/17/2009  09:46 PM             1,322 mpe_misc.h
01/31/2011  03:50 PM            57,128 mpi.h
01/31/2011  04:23 PM             3,251 mpi.mod
01/31/2011  03:50 PM            97,267 mpicxx.h
01/31/2011  03:51 PM            19,051 mpif.h
01/31/2011  03:50 PM            16,765 mpio.h
01/31/2011  04:23 PM            13,668 mpi_base.mod
01/31/2011  04:23 PM            30,866 mpi_constants.mod
01/31/2011  04:23 PM             7,802 mpi_sizeofs.mod
              16 File(s)        268,047 bytes
               2 Dir(s)  221,505,830,912 bytes free

Есть ли здесь что-нибудь, чего можно было бы пропустить?

Я довольно озадачен в этом пункте. Любое предложение будет полезно.

С уважением, Баренд.

PS: Вероятно, это должно быть помечено как "haskell-mpi", но я не могу создавать новые теги. Я думаю, что никто еще не использует его на самом деле.

РЕДАКТИРОВАТЬ: Следуя предложению Дона,

Я установил MingGW и MSYS. После запуска обновления mingw-get я использовал mingw32-get для получения libtools, mingw32-utils и mingw32-binutils. Я установил следующие переменные среды для всей системы с помощью графического интерфейса Windows:

LIBRARY_PATH="C:\Program Files\MPICH2\lib"
C_INCLUDE_PATH="C:\Program Files\MPICH2\include"

echo $LIBRARY_PATH а также echo %LIBRARY_PATH% сейчас оба работают как положено, никаких сюрпризов нет. Переменные среды установлены. Продвигается.

cabal install haskell-mpi по-прежнему производит тот же вывод, что и раньше.

Давно играл с лд, огромной красной селедкой...

Мне пришлось скрыть libmpi.a от ld, чтобы он заработал, но теперь haskell-mpi собирается!

Выкладывать пошаговые подробности вверху.

1 ответ

Решение

Мне нужно знать, что на самом деле означает зависимость MPI

Линия extra-libraries: mpi означает, что Кабал добавит -lmpi к параметрам компоновщика ld. Кроме того, инструменты, обрабатывающие заголовки, будут искать в путях включения.

Итак, как мы можем помочь GHC и binutils найти эту библиотеку?

Согласно вики, если у вас есть mingw или msys,

Если вам необходимо установить связь с программным обеспечением C, определите переменную среды C_INCLUDE_PATH, в которой перечислены каталоги, в которых можно найти файлы заголовков. Для связывания библиотек вам также необходимо определить переменную среды LIBRARY_PATH, перечислив каталоги, в которых можно найти файлы.a и.lib.

Поэтому попробуйте установить пути для включения пути к заголовкам и библиотекам.

Другие вопросы по тегам