Я использую go-hdf5 для чтения файла hdf5 в golang. Я нахожусь на windows7, используя довольно недавнюю копию mingw и hdf5 1.8.14_x86, и кажется, что попытка использовать любой из предопределенных типов не работает, давайте сосредоточимся, например, на T_NATIVE_UINT64. Я сократил этот вопрос к следующему, который в основном листья идут-hdf5 из проблемы и указывает на то, довольно фундаментальной идет не так:Почему я не могу правильно прочитать константу C из Голанга?
package main
/*
#cgo CFLAGS: -IC:/HDF_Group/HDF5/1.8.14_x86/include
#cgo LDFLAGS: -LC:/HDF_Group/HDF5/1.8.14_x86/bin -lhdf5 -lhdf5_hl
#include "hdf5.h"
#include <stdio.h>
void print_the_value2() { printf("the value of the constant is %d\n", H5T_NATIVE_UINT64); }
*/
import "C"
func main() {
C.print_the_value2()
}
Вы, очевидно, нужно иметь hdf5 и указать компилятор на заголовки/DLLs и запуск идут получить, затем выполняя печать это на моем компьютере
the value of the constant is -1962924545
Запуск вариации выше, в том, как/где константа чтения, будет давать разные ответы на ценности H5T_NATIVE_UINT64. Однако я уверен, что это ничто не является правильным значением и на самом деле попытка использовать тип с возвращенным идентификатором не работает, неудивительно.
Если я пишу и запустить "реальную" программу C, я получаю разные результаты
#include <stdio.h>
#include "hdf5.h"
hid_t _go_hdf5_H5T_NATIVE_UINT64() { return H5T_NATIVE_UINT64; }
int main()
{
printf("the value of the constant is %d", _go_hdf5_H5T_NATIVE_UINT64());
}
Компиляция с использованием
C:\Temp>gcc -IC:/HDF_Group/HDF5/1.8.14_x86/include -LC:/HDF_Group/HDF5/1.8.14_x86/bin -lhdf5 -lhdf5_hl -o stuff.exe stuff.c
и бег дает мне
the value of the constant is 50331683
И что появляется чтобы быть правильным значением, поскольку я могу использовать его непосредственно из моей программы go. Очевидно, я хочу использовать константы вместо этого. Любая идея, почему это может произойти?
Дополнительные информации следующие комментарии ниже:
Я искал определение H5T_NATIVE_UINT64 в заголовках hdf5 увидеть следующую
c:\HDF_Group\HDF5\1.8.14_x86\include>grep H5T_NATIVE_UINT64 *
H5Tpkg.h:H5_DLLVAR size_t H5T_NATIVE_UINT64_ALIGN_g;
H5Tpublic.h:#define H5T_NATIVE_UINT64 (H5OPEN H5T_NATIVE_UINT64_g)
H5Tpublic.h:H5_DLLVAR hid_t H5T_NATIVE_UINT64_g;
Весь заголовок здесь
http://www.hdfgroup.org/ftp/HDF5/prev-releases/hdf5-1.8.14/src/unpacked/src/H5Tpublic.h
Благодаря!
Можете ли вы показать мне, как определяется константа H5T_NATIVE_UINT64? – fuz
Просматривая заголовки, я получаю этот 'C: \ HDF_Group \ HDF5 \ 1.8.14_x86 \ включают> Grep H5T_NATIVE_UINT64 * H5Tpkg.h: H5_DLLVAR size_t H5T_NATIVE_UINT64_ALIGN_g; H5Tpublic.h: #define H5T_NATIVE_UINT64 (H5OPEN H5T_NATIVE_UINT64_g) H5Tpublic.h: H5_DLLVAR hid_t H5T_NATIVE_UINT64_g; ' – kch
Ваш комментарий трудно читать. Не могли бы вы добавить эту информацию к своему вопросу? Рядом с ним есть кнопка редактирования. Добавьте как можно больше информации, включая все типы и соответствующие макроопределения. – fuz