我正在尝试使用从IRIS网站下载的库。 makefile包含用于创建动态和静态库的选项。我已经尝试过使用cgo两种类型的库进行一些教程学习,但都没有成功。
这是我的代码
package main
/*
#cgo CFLAGS : -I .
#cgo LDFLAGS: -L . -llibslink
#include <libslink.h>
*/
import (
"C"
)
func main() {
C.sl_newslcd()
}
我在目录中有以下文件:
ChangeLog config.o globmatch.o logging.c slplatform.c strutils.c
Makefile doc gswap.c logging.o slplatform.h strutils.o
Makefile.wat example gswap.o main.go slplatform.o unpack.c
Makefile.win genutils.c libslink.2.4.dylib msrecord.c slutils.c unpack.h
README genutils.o libslink.a msrecord.o slutils.o unpack.o
README.md globmatch.c libslink.dylib network.c statefile.c
config.c globmatch.h libslink.h network.o statefile.o
我的错误消息如下所示:
go build -v main.go
command-line-arguments
# command-line-arguments
37: error: use of undeclared identifier 'SLCD'
37: error: use of undeclared identifier 'sl_newslcd'
最佳答案
您的主要问题是,注释不是the documentation建议的紧靠import "C"
的前面:
因此,解决方案是删除注释和导入之间的空白行。但是,这不会编译,因为对于-l
参数,lib
前缀将被忽略。您必须指定-lslink
而不是-llibslink
。最后,建议将库放在某个子文件夹中,而不要与.go
文件放在同一目录中。
带有用于slink的正确子文件夹的工作示例:
package main
// #cgo CFLAGS: -I libslink
// #cgo LDFLAGS: -L libslink -lslink
// #include <libslink.h>
import "C"
func main() {
C.sl_newslcd()
}