小编kch*_*kch的帖子

为什么我不能正确地从Golang读取C常量?

我使用go-hdf5将hdf5文件读入golang.我在windows7上使用mingw和hdf5 1.8.14_x86的最新副本,似乎尝试使用任何预定义类型都不起作用,让我们关注例如T_NATIVE_UINT64.我把问题简化为以下内容,这基本上让go-hdf5摆脱了问题并指出了一些非常根本的错误:

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()
}
Run Code Online (Sandbox Code Playgroud)

你显然需要有hdf5并将编译器指向headers/dll并运行go get,然后执行在我的电脑上打印

the value of the constant is -1962924545
Run Code Online (Sandbox Code Playgroud)

运行上述变量,在读取常量的方式/位置,将为H5T_NATIVE_UINT64的值提供不同的答案.但是我很确定没有一个是正确的值,实际上尝试使用返回id的类型不起作用,这并不令人惊讶.

如果我编写并运行"真正的"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());
}
Run Code Online (Sandbox Code Playgroud)

使用编译

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
Run Code Online (Sandbox Code Playgroud)

跑步给了我 …

c mingw hdf5 go

5
推荐指数
1
解决办法
490
查看次数

标签 统计

c ×1

go ×1

hdf5 ×1

mingw ×1