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 回复

如何从环境变量中获取路径

更多关于Golang新手求助:CGO无法正确引入头文件的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


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)
}

关键修改点:

  1. 在包含空格的路径C:/Program Files/IBM/SQLLIB两侧添加双引号
  2. 将头文件目录明确指定为include子目录:-I"C:/Program Files/IBM/SQLLIB/include"
  3. 添加了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
回到顶部