MPICH2 установлен в C: \ Program Files \ MPICH2. Существует два подкаталога (представляющих интерес): \include
, который содержит файлы .h, и \lib
, который содержит файлы .lib.
Readme, поставляемый с MPICH2, имеет следующие инструкции:
- создать make-файл
- добавить
–I...mpich2\include
- добавить
–L...mpich2\lib
- добавить
–lmpi
- добавить правила для ваших исходных файлов
- компилировать
Поскольку в моем проекте нет других правил, я не создаю make-файл, я просто захожу в командную строку и пытаюсь скомпилировать так:
g++ -I"C:\Program Files\MPICH2\include" main.cpp -L"C:\Program Files\MPICH2\lib" -lmpi
Это дает мне пригоршню undefined reference
ошибок на каждый символ MPI в коде. Я часами пытался это исправить, жонглируя переключателями -I
, -L
и -l
, перетасовывая порядок параметров, даже копировал все файлы .lib в тот же каталог, что и мой источник, но, похоже, ничего не работает .
Какой тип вуду нужен, чтобы связать эту штуку?
РЕДАКТИРОВАТЬ: я думаю, что я нашел проблему: вот выдержка из вывода компоновщика в подробном режиме (добавление -Wl,--verbose
к команде компиляции):
attempt to open C:\Program Files\MPICH2\lib/libmingwex.dll.a failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.dll.a failed
attempt to open C:\Program Files\MPICH2\lib/libmingwex.a failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.lib failed
attempt to open C:\Program Files\MPICH2\lib/libmingwex.dll failed
attempt to open C:\Program Files\MPICH2\lib/mingwex.dll failed
attempt to open C:\Program Files\MPICH2\lib\libmingwex.a failed
Очевидно, компоновщик добавляет /
вместо \
к именам каталогов, которые я ему предоставляю (за исключением случаев, когда по какой-то причине ищется формат lib___.a
), что, очевидно, не является допустимым путем. Можно ли указать компоновщику использовать обратную косую черту вместо косой черты?
Это также привлекло мое внимание:
attempt to open /mingw/lib/libmingwex.a succeeded
Итак, я попытался скомпилировать так:
g++ -I"/Program Files/MPICH2/include" -L"/Program Files/MPICH2/lib" objManager.cpp ongom.cpp io.cpp main.cpp -lmpi -lcxx
Но я все равно получаю те же undefined reference
ошибки.