Не удается заставить Кабала найти библиотеку mpi для haskell-mpi в Windows
ПРОБЛЕМА РЕШЕНА!
- Следуйте инструкциям Dons, размещенным здесь
- Откройте переменные среды (Мой компьютер -> Свойства (в контекстном меню) -> Дополнительно)
- Добавить или создать новую переменную среды
C_INCLUDE_PATH
поэтому он указывает на каталог включения MPI. В моем случае,/c/program files/mpich2/include
, - Добавить или создать новую переменную среды
LIBRARY_PATH
поэтому он указывает на каталог lib MPI. В моем случае,/c/program files/mpich2/lib
- Спрячь 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.
Поэтому попробуйте установить пути для включения пути к заголовкам и библиотекам.