Golang中CGO在Windows系统下的使用指南
Golang中CGO在Windows系统下的使用指南
package main
//#include<sqlcli1.h>
import "C"
import "fmt"
func main(){
fmt.Println(C.SQL_API_SQLCOLUMNS)
}
sqlcli1.h 文件位于 C:\Program Files\IBM\SQLLIB\include
程序文件位于 C:\Go\Programs
错误信息:
# command-line-arguments
.\calling.go:3:20: fatal error: sqlcli1.h: No such file or directory
//#include<sqlcli1.h>
^
compilation terminated.
如何将 sqlcli1.h 文件链接到 program.go 文件。
我的环境变量:
C:\Go\programs>go env
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\rakhil\AppData\Local\go-build
set GOEXE=.exe
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\rakhil\go
set GORACE=
set GOROOT=C:\Go
set GOTMPDIR=
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\rakhil\AppData\Local\Temp\go-build674647070=/tmp/go-build -gno-record-gcc-switches
更多关于Golang中CGO在Windows系统下的使用指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于Golang中CGO在Windows系统下的使用指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Windows系统下使用CGO时,需要正确配置头文件的包含路径。根据您的错误信息,编译器无法找到sqlcli1.h文件。以下是解决方案:
方法1:使用CGO_CFLAGS环境变量
在编译前设置CGO_CFLAGS环境变量,指定头文件路径:
package main
/*
#cgo CFLAGS: -IC:/Program Files/IBM/SQLLIB/include
#include <sqlcli1.h>
*/
import "C"
import "fmt"
func main() {
fmt.Println(C.SQL_API_SQLCOLUMNS)
}
方法2:通过命令行设置环境变量
在命令行中设置环境变量后编译:
set CGO_CFLAGS=-I"C:/Program Files/IBM/SQLLIB/include"
go build calling.go
或者使用PowerShell:
$env:CGO_CFLAGS='-I"C:/Program Files/IBM/SQLLIB/include"'
go build calling.go
方法3:使用绝对路径包含头文件
直接在代码中使用绝对路径:
package main
/*
#cgo CFLAGS: -I"C:/Program Files/IBM/SQLLIB/include"
#include <sqlcli1.h>
*/
import "C"
import "fmt"
func main() {
fmt.Printf("SQL_API_SQLCOLUMNS: %d\n", C.SQL_API_SQLLCOLUMNS)
}
方法4:如果还需要链接库文件
如果还需要链接DB2的库文件,添加LDFLAGS:
package main
/*
#cgo CFLAGS: -I"C:/Program Files/IBM/SQLLIB/include"
#cgo LDFLAGS: -L"C:/Program Files/IBM/SQLLIB/lib" -ldb2cli
#include <sqlcli1.h>
*/
import "C"
import "fmt"
func main() {
fmt.Println(C.SQL_API_SQLCOLUMNS)
}
完整的工作示例
package main
/*
#cgo windows CFLAGS: -I"C:/Program Files/IBM/SQLLIB/include"
#include <sqlcli1.h>
*/
import "C"
import "fmt"
func main() {
// 访问DB2 CLI常量
fmt.Printf("SQL_API_SQLCOLUMNS: %d\n", C.SQL_API_SQLCOLUMNS)
// 如果需要调用DB2 CLI函数
var henv C.SQLHENV
ret := C.SQLAllocHandle(C.SQL_HANDLE_ENV, C.SQLHANDLE(nil), &henv)
if ret == C.SQL_SUCCESS {
fmt.Println("SQLAllocHandle succeeded")
C.SQLFreeHandle(C.SQL_HANDLE_ENV, henv)
}
}
编译命令:
set CGO_CFLAGS=-I"C:/Program Files/IBM/SQLLIB/include"
go build -o db2app.exe calling.go
关键点:
- 使用
#cgo CFLAGS:指令指定头文件路径 - Windows路径使用正斜杠或双反斜杠
- 路径包含空格时需要引号包围
- 确保DB2客户端库已正确安装

