Golang新手求助:CGO无法正确引入头文件
Golang新手求助:CGO无法正确引入头文件
操作系统:Windows
Go版本:1.11
我编写了一个使用C头文件中某些函数的程序,但遇到了以下错误:
错误:
#go build command-line-arguments: invalid flag in #cgo CFLAGS: Files/IBM/SQLLIB
代码:(sql.go)
package main
// #cgo CFLAGS: -I C:/Program Files/IBM/SQLLIB
// #cgo LDFLAGS: -lsqllib
// #include "sqlcli1.h"
import "C"
import "fmt"
func main() {
fmt.Println(C.SQL_BLOB)
}
sqlcli1.h 文件位于 C:\Program Files\IBM\SQLLIB\include 目录中,而我的代码 (sql.go) 位于 C:\Go\programs 目录中。
如何解决此错误?
提前感谢。
更多关于Golang新手求助:CGO无法正确引入头文件的实战教程也可以访问 https://www.itying.com/category-94-b0.html
7 回复
sqllib/include 目录中的 specstrings.h 文件?
我明白这不是cgo的问题。你知道如何解决吗 @rot13
你在 LDFLAGS 中使用的 -lsqllib 有什么作用?
我检查过了,错误是由于GCC中的specstrings.h文件引起的。我已经解决了这个问题。
谢谢 @rot13
第4行在代码中的意思是
代码:
lsqllib在 LDFLAGS 路径中查找 sqllib 文件夹。
如果路径中有多个文件夹,我们必须使用它。
在Windows系统中,#cgo CFLAGS路径包含空格时需要使用引号包裹路径,否则编译器会将路径分割为多个参数导致错误。以下是修正后的代码:
package main
// #cgo CFLAGS: -I"C:/Program Files/IBM/SQLLIB/include"
// #cgo LDFLAGS: -L"C:/Program Files/IBM/SQLLIB/lib" -lsqllib
// #include "sqlcli1.h"
import "C"
import "fmt"
func main() {
fmt.Println(C.SQL_BLOB)
}
关键修改点:
- 在包含空格的路径
C:/Program Files/IBM/SQLLIB两侧添加双引号 - 将头文件目录明确指定为
include子目录:-I"C:/Program Files/IBM/SQLLIB/include" - 添加了
LDFLAGS指定库文件路径:-L"C:/Program Files/IBM/SQLLIB/lib"
如果库文件在其他位置,请相应调整LDFLAGS中的路径。编译时确保:
- 头文件
sqlcli1.h确实存在于C:/Program Files/IBM/SQLLIB/include/目录 - 对应的库文件(如
.dll或.lib)存在于C:/Program Files/IBM/SQLLIB/lib/目录
编译命令:
go build sql.go

