Я пытаюсь скомпилировать и связать HDF5 с программой Fortran, но я получаю ошибку во время выполнения. Я внимательно следил за процедурой, описанной в ответе на этот вопросИспользовать HDF5 от minGW на окнах
Use HDF5 from intel fortran on windows
я настроил PATH в переменных окружения, а не устанавливать их в Visual Studio. Я переместил все сгенерированные файлы .mod и .lib в папки mod и lib в папке проекта.
из командной строки, мой компилятор конфигурации выглядит
gfortran --version
GNU Fortran (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 4.9.2
gmake --version
GNU Make 3.81
И мой Makefile выглядит
ifdef SystemRoot
PATHSEP2 = \\
else
PATHSEP2 =/
endif
PS = $(strip $(PATHSEP2))
OBJ_DIR = obj
MOD_DIR = mod
LIB_DIR = lib
FC = gfortran
FCFLAGS = -I$(MOD_DIR) -g -Wall
FLFLAGS = -I$(MOD_DIR) -L$(LIB_DIR) -l$(LIB_DIR)hdf5_fortran
SRCS_F = testHDF5.f90
TARGET = testHDF5
all: $(TARGET)
testHDF5: testHDF5.f90
$(FC) -o [email protected] testHDF5.f90 $(FLFLAGS)
$(OBJ_DIR)$(PS)%.o: %.f90
$(FC) $(FCFLAGS) -c -o [email protected] $<
Я изменил hdf5_fortran.lib к libhdf5_fortran.lib из-за того, что я прочитал здесь
http://www.mingw.org/wiki/specify_the_libraries_for_the_linker_to_use
Когда я бегу gmake, я получить
gfortran -o testHDF5 testHDF5.f90 -Imod -Llib -llibhdf5_fortran
И когда я пытаюсь запустить исполняемый файл, появляется всплывающее окно, которое говорит «Приложение не удалось правильно запустить (0xc000007b). Нажмите кнопку OK, чтобы закрыть приложение.»
Этой ссылку
предполагает, что это происходит из-за несовместимости 32-разрядного на 64-бит. Я использую 64-битную машину, и Я загрузить 32-разрядную версию CMake с, но только потому, что, кажется, не быть доступны версии для 64-битных машин. Кроме того, эта ссылка
http://www.cmake.org/pipermail/cmake/2010-September/039375.html
предполагает, что он не должен Итак, мой вопрос в том, где я ошибся? Есть ли вопиющие ошибки с тем, что я показал до сих пор?
UPDATE:
я узнал, что ошибка времени выполнения была из-за не указав путь, в этом случае HDF5_DIR. В документе USING_HDF5_CMAKE, он говорит, чтобы указать переменную окружения
HDF5_DIR=C:/Program Files/HDF_Group/HDF5/1.8.x/cmake/hdf5
исправляющие проблему применения врезаться в самом начале. Но теперь, я получаю ошибку
HDF5-DIAG: Error detected in HDF5 (1.8.14) thread 0:
#000: C:\Users\Charlie\Downloads\CMake\hdf5-1.8.14\src\H5D.c line 167 in H5Dcr
eate2(): not a datatype ID
major: Invalid arguments to routine
minor: Inappropriate type
HDF5-DIAG: Error detected in HDF5 (1.8.14) thread 0:
#000: C:\Users\Charlie\Downloads\CMake\hdf5-1.8.14\src\H5D.c line 415 in H5Dcl
ose(): not a dataset
major: Invalid arguments to routine
minor: Inappropriate type
Я полагаю, первая ошибка
HDF5-DIAG: Error detected in HDF5 (1.8.14) thread 0:
#000: C:\Users\Charlie\Downloads\CMake\hdf5-1.8.14\src\H5D.c line 167 in H5Dcr
eate2(): not a datatype ID
major: Invalid arguments to routine
minor: Inappropriate type
Является наиболее важным, поскольку это может вызвать более поздние. По этой теме
Предполагается, что тот же компилятор используется для создания библиотеки, как создание исходного кода на языке Fortran (если я не ошибаюсь). Во время сборки, использующей CMake, я указал на использование MinGW, который, как я полагаю, используется во время обеих сборщиков, правильно?
Опять же, любая помощь на это очень ценится.