Tôi đang sử dụng go-hdf5 để đọc tệp hdf5 vào golang. Tôi đang sử dụng windows7 bằng cách sử dụng một bản sao khá gần đây của mingw và hdf5 1.8.14_x86 và có vẻ như cố gắng sử dụng bất kỳ loại được xác định trước nào không hoạt động, hãy tập trung ví dụ vào T_NATIVE_UINT64. Tôi đã làm giảm vấn đề này như sau, mà về cơ bản lá go-hdf5 ra của vấn đề và điểm tại một cái gì đó khá cơ bản đi sai:Tại sao tôi không thể đọc một hằng số C từ Golang một cách chính xá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()
}
Bạn rõ ràng là cần phải có hdf5 và chỉ trình biên dịch vào các tiêu đề/dlls và chạy đi lấy, sau đó thực hiện bản in này trên pc của tôi
the value of the constant is -1962924545
chạy biến những điều trên, trong cách/nơi hằng số được đọc, sẽ cho câu trả lời khác nhau cho giá trị của H5T_NATIVE_UINT64. Tuy nhiên tôi khá chắc chắn đó là không có giá trị đúng và trong thực tế, cố gắng sử dụng một loại với id trả lại không hoạt động, không ngạc nhiên.
Nếu tôi viết và chạy một "thực" chương trình C, tôi nhận được kết quả khác nhau
#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());
}
Biên soạn bằng
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
và chạy mang lại cho tôi
the value of the constant is 50331683
Và đó xuất hiện là giá trị phù hợp vì tôi có thể sử dụng nó trực tiếp từ chương trình của tôi. Rõ ràng là tôi muốn có thể sử dụng các hằng số thay thế. Bất kỳ ý tưởng tại sao điều này có thể xảy ra?
thêm thông tin sau đây ý kiến dưới đây:
Tôi đã tìm kiếm định nghĩa của H5T_NATIVE_UINT64 trong tiêu đề hdf5 và xem sau
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;
Toàn bộ tiêu đề là đây
http://www.hdfgroup.org/ftp/HDF5/prev-releases/hdf5-1.8.14/src/unpacked/src/H5Tpublic.h
Cảm ơn!
Bạn có thể chỉ cho tôi cách hằng số H5T_NATIVE_UINT64 được xác định? – fuz
Xem qua các tiêu đề, tôi nhận được thông tin này '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; ' – kch
Cảm nhận của bạn là khó đọc. Bạn có nhớ thêm thông tin này vào câu hỏi của mình không? Có một nút "chỉnh sửa" bên dưới nó. Vui lòng thêm càng nhiều thông tin càng tốt, bao gồm tất cả các loại và định nghĩa macro có liên quan. – fuz