Bir hdf5 dosyasını golang içine okumak için go-hdf5 kullanıyorum. Windows 7'de mingw ve hdf5 1.8.14_x86'nın yeni bir kopyasını kullanıyorum ve önceden tanımlanmış tiplerin hiçbirini kullanmaya çalışmak gibi görünmüyor, örneğin T_NATIVE_UINT64'e odaklanalım.Neden Golang'dan doğru bir C sabitini okuyamıyorum?
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()
}
Açıkçası HDF5 ve başlıkları/DLL en derleyici işaret etmek gerekir: Ben temelde go-HDF5 bırakır sorunu ve puan üzerinden oldukça temel bir şeye yanlış gittiğini aşağıda, konuyu azalttık ve, getireyim çalışan sonra H5T_NATIVE_UINT64 değeri için farklı cevaplar vermek, benim pc sabit okunur nerede nasıl/yukarıda varyasyonlarını Running
the value of the constant is -1962924545
üzerinde baskılar bu olacaktır yürütülmesi. Ancak, hiçbiri doğru değer olmadığından ve döndürülen kimliğe sahip olmayan bir türün kullanılmaya çalışılmasının şaşırtıcı olmadığından eminim. Yazıyorum ve "gerçek" bir C programını çalıştırırsanız
, ben farklı sonuçlar
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
ve çalışan kullanarak derleniyor
#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());
}
olsun bana
the value of the constant is 50331683
verir Ve anlaşılıyor Doğrudan benim go programımdan kullanabileceğim doğru değer olmak. Açıkçası, sabitleri kullanabilmek istiyorum. Bunun neden olabileceği hakkında bir fikrin var mı? Aşağıda
Ekstra bilgi aşağıdaki yorumlar:
ben hdf5 başlıklarında H5T_NATIVE_UINT64 tanımında aradık ve bütün başlık burada
http://www.hdfgroup.org/ftp/HDF5/prev-releases/hdf5-1.8.14/src/unpacked/src/H5Tpublic.h
aşağıdaki
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;
bkz Teşekkürler!
H5T_NATIVE_UINT64 sabitinin nasıl tanımlandığını gösterir misiniz? – fuz
başlıklarının aracılığıyla bakınca, bu 'c olsun: \ HDF_Group \ HDF5 \ 1.8.14_x86 \ şunlardır> 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
Yorumunuz okumak zordur. Bu bilgiyi sorunuza ekleyebilir misiniz? Altında bir "düzenle" düğmesi var. Lütfen tüm tür ve ilgili makro tanımları dahil olmak üzere mümkün olduğunca çok bilgi ekleyin. – fuz